£Á°èZ¨Ä…–K§‚«“ô4“ÒÙ´dîfUÙÃÅ WKbyÊ¦•êŽ…È®FÒ¿ÊÎóCozá¬S@6{Í:›œêZÌ:Š•_%:¢¾¾~;‘Ã~èŠ©ÊÇí`ÔÑ©úë™µ'5I¿fš×WO%ø9¾«¾DK|€ùÍD”Ýs]nHÕ¶ê×Ó¼ãžªéUWŸÈË%DÒÕ¬ï‘]/Åcx  ‰ï2ß]ä6G[]S£ÔÏ¯rs{úëóµmÒï#UQxo·õÞCe]"±/aÙ&Eã4ú9Jé_ÞåëdãöKë)AÞ                  ¯¹ægƒÛowÐø^d™ý½ßB7áyMä9ÜÖUã
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
<html>
B
     f4)                 @   s  d ddgZ ddlZddlZddlZddlZddlZddlmZ yej	e
 ZW n ek
rj   dZY nX dd Zdd Zdd	 ZG d
d  d eZG dd deZG dd deZe aedae a[i Zx<eej D ]*\ZZedd dkrdekreee < qW e Z dS )BaseProcesscurrent_processactive_children    N)WeakSetc               C   s   t S )z@
    Return process object representing the current process
    )_current_process r   r   </opt/alt/python37/lib64/python3.7/multiprocessing/process.pyr   $   s    c               C   s   t   ttS )zN
    Return list of process objects corresponding to live child processes
    )_cleanuplist	_childrenr   r   r   r   r   *   s    c              C   s.   x(t tD ]} | j d k	r
t|  q
W d S )N)r
   r   _popenpolldiscard)pr   r   r   r	   5   s    r	   c               @   s   e Zd ZdZdd Zddddi fddddZd	d
 Zdd Zdd Zdd Z	dd Z
d,ddZdd Zdd Zedd Zejdd Zedd Zejdd Zedd  Zejd!d  Zed"d# Zed$d% ZeZed&d' Zd(d) Zd*d+ ZdS )-r   z
    Process objects represent activity that is run in a separate process

    The class is analogous to `threading.Thread`
    c             C   s   t d S )N)NotImplementedError)selfr   r   r   _PopenE   s    zBaseProcess._PopenNr   )daemonc            C   s   |d kst dtt}tj|f | _tj | _t | _	d | _
d| _|| _t|| _t|| _|pt| jd ddd | jD  | _|d k	r|| _t|  d S )Nz#group argument must be None for nowF-:c             s   s   | ]}t |V  qd S )N)str).0ir   r   r   	<genexpr>U   s    z'BaseProcess.__init__.<locals>.<genexpr>)AssertionErrornext_process_counterr   	_identity_configcopyosgetpid_parent_pidr   _closed_targettuple_argsdict_kwargstype__name__join_namer   	_danglingadd)r   grouptargetnameargskwargsr   countr   r   r   __init__H   s    


zBaseProcess.__init__c             C   s   | j rtdd S )Nzprocess object is closed)r#   
ValueError)r   r   r   r   _check_closedZ   s    zBaseProcess._check_closedc             C   s   | j r| j | j| j dS )zQ
        Method to be run in sub-process; can be overridden in sub-class
        N)r$   r&   r(   )r   r   r   r   run^   s    zBaseProcess.runc             C   sz   |    | jdkstd| jt ks0tdtjdrDtdt	  | 
| | _| jj| _| `| `| `t|  dS )z%
        Start child process
        Nzcannot start a process twicez:can only start a process object created by current processr   z3daemonic processes are not allowed to have children)r7   r   r   r"   r    r!   r   r   getr	   r   sentinel	_sentinelr$   r&   r(   r   r.   )r   r   r   r   starte   s    
zBaseProcess.startc             C   s   |    | j  dS )zT
        Terminate process; sends SIGTERM signal or uses TerminateProcess()
        N)r7   r   	terminate)r   r   r   r   r=   w   s    zBaseProcess.terminatec             C   s   |    | j  dS )zT
        Terminate process; sends SIGKILL signal or uses TerminateProcess()
        N)r7   r   kill)r   r   r   r   r>   ~   s    zBaseProcess.killc             C   sR   |    | jt kstd| jdk	s0td| j|}|dk	rNt|  dS )z5
        Wait until child process terminates
        zcan only join a child processNzcan only join a started process)	r7   r"   r    r!   r   r   waitr   r   )r   ZtimeoutZresr   r   r   r+      s    zBaseProcess.joinc             C   s`   |    | tkrdS | jt ks*td| jdkr8dS | j }|dkrNdS t	|  dS dS )z1
        Return whether process is alive
        Tzcan only test a child processNF)
r7   r   r"   r    r!   r   r   r   r   r   )r   
returncoder   r   r   is_alive   s    


zBaseProcess.is_alivec             C   sH   | j dk	r>| j  dkr td| j   d| _ | `t|  d| _dS )z
        Close the Process object.

        This method releases resources held by the Process object.  It is
        an error to call this method if the child process is still running.
        Nz^Cannot close a process while it is still running. You should first call join() or terminate().T)r   r   r6   closer;   r   r   r#   )r   r   r   r   rB      s    


zBaseProcess.closec             C   s   | j S )N)r,   )r   r   r   r   r1      s    zBaseProcess.namec             C   s   t |tstd|| _d S )Nzname must be a string)
isinstancer   r   r,   )r   r1   r   r   r   r1      s    c             C   s   | j ddS )z4
        Return whether process is a daemon
        r   F)r   r9   )r   r   r   r   r      s    zBaseProcess.daemonc             C   s    | j dkstd|| jd< dS )z1
        Set whether process is a daemon
        Nzprocess has already startedr   )r   r   r   )r   Zdaemonicr   r   r   r      s    c             C   s
   | j d S )Nauthkey)r   )r   r   r   r   rD      s    zBaseProcess.authkeyc             C   s   t || jd< dS )z2
        Set authorization key of process
        rD   N)AuthenticationStringr   )r   rD   r   r   r   rD      s    c             C   s"   |    | jdkr| jS | j S )zM
        Return exit code of process or `None` if it has yet to stop
        N)r7   r   r   )r   r   r   r   exitcode   s    
zBaseProcess.exitcodec             C   s*   |    | tkrt S | jo$| jjS dS )zU
        Return identifier (PID) of process or `None` if it has yet to start
        N)r7   r   r    r!   r   pid)r   r   r   r   ident   s    zBaseProcess.identc             C   s2   |    y| jS  tk
r,   tddY nX dS )z{
        Return a file descriptor (Unix) or handle (Windows) suitable for
        waiting for process termination.
        zprocess not startedN)r7   r;   AttributeErrorr6   )r   r   r   r   r:      s
    zBaseProcess.sentinelc             C   s   | t krd}nJ| jrd}n>| jt kr.d}n*| jd kr>d}n| j d k	rT| j}nd}t|t	kr|dkrrd}ndt
|| }dt| j| j|| jrd	pd
f S )NZstartedclosedunknowninitialr   Zstoppedzstopped[%s]z<%s(%s, %s%s)>z daemon )r   r#   r"   r    r!   r   r   rF   r)   int_exitcode_to_namer9   r*   r,   r   )r   Zstatusr   r   r   __repr__   s"    
zBaseProcess.__repr__c          
   C   sR  ddl m}m} zy|| jd k	r,|| j tdat a	|
  t}| az|j  |  W d ~X |d z|   d}W d |  X W n tk
r } zJ|jsd}n:t|jd tr|jd }ntjt|jd d  d}W d d }~X Y n2   d}dd l}tjd| j  |  Y nX W d t  |d|  |  X |S )N   )utilcontextz child process calling self.run()r   
zProcess %s:
z process exiting with exitcode %d) rM   rR   rS   Z_start_methodZ_force_start_method	itertoolsr4   r   setr   Z_close_stdinr   Z_finalizer_registryclearZ_run_after_forkersinfor8   Z_exit_function
SystemExitr2   rC   rN   sysstderrwriter   	tracebackr1   	print_exc	threadingZ	_shutdownZ_flush_std_streams)r   rR   rS   Zold_processrF   er]   r   r   r   
_bootstrap  sD    




zBaseProcess._bootstrap)N)r*   
__module____qualname____doc__r   r5   r7   r8   r<   r=   r>   r+   rA   rB   propertyr1   setterr   rD   rF   rH   rG   r:   rP   ra   r   r   r   r   r   ?   s0   

c               @   s   e Zd Zdd ZdS )rE   c             C   s,   ddl m} | d krtdtt| ffS )NrQ   )get_spawning_popenzJPickling an AuthenticationString object is disallowed for security reasons)rS   rg   	TypeErrorrE   bytes)r   rg   r   r   r   
__reduce__F  s
    
zAuthenticationString.__reduce__N)r*   rb   rc   rj   r   r   r   r   rE   E  s   rE   c               @   s   e Zd Zdd Zdd ZdS )_MainProcessc             C   s8   d| _ d| _d | _d | _d| _ttddd| _d S )Nr   ZMainProcessF    z/mp)rD   Z	semprefix)	r   r,   r"   r   r#   rE   r    urandomr   )r   r   r   r   r5   U  s    z_MainProcess.__init__c             C   s   d S )Nr   )r   r   r   r   rB   g  s    z_MainProcess.closeN)r*   rb   rc   r5   rB   r   r   r   r   rk   S  s   rk   rQ      ZSIG_)!__all__r    rZ   signalrU   r_   Z_weakrefsetr   pathabspathgetcwdZORIGINAL_DIROSErrorr   r   r	   objectr   ri   rE   rk   r   r4   r   rV   r   rO   r
   __dict__itemsr1   Zsignumr-   r   r   r   r   <module>
   s6   


  
