509318396
Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­
<!DOCTYPE html>
<html>
3

  \û#  ã               @   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mZ yejjej	ƒ ƒZ
W n ek
rb   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jdƒaeƒ a[i Zx<eejjƒ ƒD ]*\ZZedd… dkoödekrØeee < qØW 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   ú//usr/lib64/python3.6/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jƒ d k	r
tj| ƒ q
W d S )N)r
   r   Ú_popenÚpollÚdiscard)Úpr   r   r   r	   4   s    r	   c               @   sâ   e Zd ZdZdd„ Zdddf i fddœdd„Zdd	„ Zd
d„ Zdd„ Zd%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   Ú_PopenD   s    zBaseProcess._PopenN)Údaemonc            C   s¢   |d kst dƒ‚ttƒ}tj|f | _tjjƒ | _tjƒ | _	d | _
|| _t|ƒ| _t|ƒ| _|p‚t| ƒjd djdd„ | jD ƒƒ | _|d k	r”|| _tj| ƒ d S )Nz#group argument must be None for nowú-ú:c             s   s   | ]}t |ƒV  qd S )N)Ústr)Ú.0Úir   r   r   ú	<genexpr>S   s    z'BaseProcess.__init__.<locals>.<genexpr>)ÚAssertionErrorÚnextÚ_process_counterr   Ú	_identityÚ_configÚcopyÚosÚgetpidÚ_parent_pidr   Ú_targetÚtupleÚ_argsÚdictÚ_kwargsÚtypeÚ__name__ÚjoinÚ_namer   Ú	_danglingÚadd)r   ÚgroupÚtargetÚnameÚargsÚkwargsr   Úcountr   r   r   Ú__init__G   s    


zBaseProcess.__init__c             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   ÚrunX   s    zBaseProcess.runc             C   st   | j dkstdƒ‚| jtjƒ ks(tdƒ‚tjjdƒ s>tdƒ‚tƒ  | j	| ƒ| _ | j j
| _| `| `| `tj| ƒ 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)r   r   r"   r    r!   r   r   Úgetr	   r   ÚsentinelÚ	_sentinelr#   r%   r'   r   r-   )r   r   r   r   Ústart_   s    
zBaseProcess.startc             C   s   | j jƒ  dS )zT
        Terminate process; sends SIGTERM signal or uses TerminateProcess()
        N)r   Ú	terminate)r   r   r   r   r:   p   s    zBaseProcess.terminatec             C   sJ   | j tjƒ kstdƒ‚| jdk	s(tdƒ‚| jj|ƒ}|dk	rFtj| ƒ dS )z5
        Wait until child process terminates
        zcan only join a child processNzcan only join a started process)r"   r    r!   r   r   Úwaitr   r   )r   ZtimeoutÚresr   r   r   r*   v   s
    zBaseProcess.joinc             C   sX   | t krdS | jtjƒ ks"tdƒ‚| jdkr0dS | jjƒ }|dkrFdS tj| ƒ dS dS )z1
        Return whether process is alive
        Tzcan only test a child processNF)	r   r"   r    r!   r   r   r   r   r   )r   Ú
returncoder   r   r   Úis_alive€   s    


zBaseProcess.is_alivec             C   s   | j S )N)r+   )r   r   r   r   r0   ’   s    zBaseProcess.namec             C   s   t |tƒstdƒ‚|| _d S )Nzname must be a string)Ú
isinstancer   r   r+   )r   r0   r   r   r   r0   –   s    c             C   s   | j jddƒS )z4
        Return whether process is a daemon
        r   F)r   r6   )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   r@   ª   s    zBaseProcess.authkeyc             C   s   t |ƒ| jd< dS )z2
        Set authorization key of process
        r@   N)ÚAuthenticationStringr   )r   r@   r   r   r   r@   ®   s    c             C   s   | j dkr| j S | j jƒ S )zM
        Return exit code of process or `None` if it has yet to stop
        N)r   r   )r   r   r   r   Úexitcodeµ   s    
zBaseProcess.exitcodec             C   s"   | t krtjƒ S | jo| jjS dS )zU
        Return identifier (PID) of process or `None` if it has yet to start
        N)r   r    r!   r   Úpid)r   r   r   r   Úident¾   s    zBaseProcess.identc             C   s(   y| j S  tk
r"   t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)r8   ÚAttributeErrorÚ
ValueError)r   r   r   r   r7   Ê   s    zBaseProcess.sentinelc             C   s˜   | t krd}n>| jtjƒ kr"d}n*| jd kr2d}n| jjƒ d k	rH| j}nd}t|ƒtkrv|dkrfd}ndt	j
||ƒ }dt| ƒj| j|| jr�dp’d	f S )
NZstartedÚunknownÚinitialr   Zstoppedzstopped[%s]z<%s(%s, %s%s)>z daemonÚ )r   r"   r    r!   r   r   rB   r(   ÚintÚ_exitcode_to_namer6   r)   r+   r   )r   Zstatusr   r   r   Ú__repr__Õ   s    
zBaseProcess.__repr__c              C   sJ  ddl m}m} �zy|| jd k	r,|j| jƒ tjdƒatƒ a	|j
ƒ  t}| az|jjƒ  |jƒ  W d ~X |jdƒ z| jƒ  d}W d |jƒ  X W n˜ tk
rø } zL|js®d}n:t|jd tƒrÊ|jd }ntjjt|jd ƒd ƒ d}W Y d d }~X n2   d}dd l}tjjd| j ƒ |jƒ  Y nX W d |jd| ƒ |jƒ  X |S )Né   )ÚutilÚcontextz child process calling self.run()r   Ú
zProcess %s:
z process exiting with exitcode %d)rI   rN   rO   Z_start_methodZ_force_start_methodÚ	itertoolsr3   r   Úsetr   Z_close_stdinr   Z_finalizer_registryÚclearZ_run_after_forkersÚinfor5   Z_exit_functionÚ
SystemExitr1   r?   rJ   ÚsysÚstderrÚwriter   Ú	tracebackr0   Ú	print_excZ_flush_std_streams)r   rN   rO   Zold_processrB   ÚerY   r   r   r   Ú
_bootstrapí   sB    




zBaseProcess._bootstrap)N)r)   Ú
__module__Ú__qualname__Ú__doc__r   r4   r5   r9   r:   r*   r>   Úpropertyr0   Úsetterr   r@   rB   rD   rC   r7   rL   r\   r   r   r   r   r   >   s*   

	
c               @   s   e Zd Zdd„ ZdS )rA   c             C   s,   ddl m} |ƒ d krtdƒ‚tt| ƒffS )NrM   )Úget_spawning_popenzJPickling an AuthenticationString object is disallowed for security reasons)rO   rb   Ú	TypeErrorrA   Úbytes)r   rb   r   r   r   Ú
__reduce__  s
    
zAuthenticationString.__reduce__N)r)   r]   r^   re   r   r   r   r   rA     s   rA   c               @   s   e Zd Zdd„ ZdS )Ú_MainProcessc             C   s2   f | _ d| _d | _d | _ttjdƒƒddœ| _d S )NZMainProcessé    z/mp)r@   Z	semprefix)r   r+   r"   r   rA   r    Úurandomr   )r   r   r   r   r4   -  s    z_MainProcess.__init__N)r)   r]   r^   r4   r   r   r   r   rf   +  s   rf   rM   é   ZSIGÚ_) Ú__all__r    rV   ÚsignalrQ   Ú_weakrefsetr   ÚpathÚabspathÚgetcwdZORIGINAL_DIRÚOSErrorr   r   r	   Úobjectr   rd   rA   rf   r   r3   r   rR   r   rK   r
   Ú__dict__Úitemsr0   Zsignumr,   r   r   r   r   Ú<module>
   s2   


 `
