B
    2*™\¯*  ã               @   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ràdekràeee < qàW eƒ Z dS )ÚBaseProcessÚcurrent_processÚactive_childrené    N)ÚWeakSetc               C   s   t S )N)Ú_current_process© r   r   úBC:\ALexclude\prg\programme\Python37\Lib\multiprocessing\process.pyr   $   s    c               C   s   t ƒ  ttƒS )N)Ú_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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   c             C   s   t ‚d S )N)ÚNotImplementedError)Úselfr   r   r   Ú_PopenE   s    zBaseProcess._PopenNr   )Údaemonc            C   s˜   t tƒ}tj|f | _tj ¡ | _t ¡ | _d | _	d| _
|| _t|ƒ| _t|ƒ| _|pxt| ƒjd d dd„ | jD ƒ¡ | _|d k	rŠ|| _t | ¡ d S )NFú-ú:c             s   s   | ]}t |ƒV  qd S )N)Ústr)Ú.0Úir   r   r   ú	<genexpr>U   s    z'BaseProcess.__init__.<locals>.<genexpr>)Ú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 )N)r#   r%   r'   )r   r   r   r   Úrun^   s    zBaseProcess.runc             C   s>   |   ¡  tƒ  |  | ¡| _| jj| _| `| `| `t	 
| ¡ d S )N)r6   r	   r   r   ÚsentinelÚ	_sentinelr#   r%   r'   r   r-   )r   r   r   r   Ústarte   s    
zBaseProcess.startc             C   s   |   ¡  | j ¡  d S )N)r6   r   Ú	terminate)r   r   r   r   r;   w   s    zBaseProcess.terminatec             C   s   |   ¡  | j ¡  d S )N)r6   r   Úkill)r   r   r   r   r<   ~   s    zBaseProcess.killc             C   s*   |   ¡  | j |¡}|d k	r&t | ¡ d S )N)r6   r   Úwaitr   r   )r   ZtimeoutÚresr   r   r   r*   …   s    zBaseProcess.joinc             C   sJ   |   ¡  | tkrdS | jd kr"dS | j ¡ }|d kr8dS t | ¡ dS d S )NTF)r6   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 )Nz^Cannot close a process while it is still running. You should first call join() or terminate().T)r   r   r5   Úcloser9   r   r   r"   )r   r   r   r   rA   £   s    


zBaseProcess.closec             C   s   | j S )N)r+   )r   r   r   r   r0   ´   s    zBaseProcess.namec             C   s
   || _ d S )N)r+   )r   r0   r   r   r   r0   ¸   s    c             C   s   | j  dd¡S )Nr   F)r   Úget)r   r   r   r   r   ½   s    zBaseProcess.daemonc             C   s   || j d< d S )Nr   )r   )r   Zdaemonicr   r   r   r   Ä   s    c             C   s
   | j d S )NÚauthkey)r   )r   r   r   r   rC   Ì   s    zBaseProcess.authkeyc             C   s   t |ƒ| jd< d S )NrC   )ÚAuthenticationStringr   )r   rC   r   r   r   rC   Ð   s    c             C   s"   |   ¡  | jd kr| jS | j ¡ S )N)r6   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 )N)r6   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 )Nzprocess not started)r6   r9   ÚAttributeErrorr5   )r   r   r   r   r8   î   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rœd	pžd
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   rE   r(   ÚintÚ_exitcode_to_namerB   r)   r+   r   )r   Ú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s®d}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) rL   rR   rS   Z_start_methodZ_force_start_methodÚ	itertoolsr3   r   Úsetr   Z_close_stdinr   Z_finalizer_registryÚclearZ_run_after_forkersÚinfor7   Z_exit_functionÚ
SystemExitr1   Ú
isinstancerM   ÚsysÚstderrÚwriter   Ú	tracebackr0   Ú	print_excÚ	threadingZ	_shutdownZ_flush_std_streams)r   rR   rS   Zold_processrE   Úer^   r   r   r   Ú
_bootstrap  sD    




zBaseProcess._bootstrap)N)r)   Ú
__module__Ú__qualname__r   r4   r6   r7   r:   r;   r<   r*   r@   rA   Úpropertyr0   Úsetterr   rC   rE   rG   rF   r8   rP   rb   r   r   r   r   r   ?   s.   

c               @   s   e Zd Zdd„ ZdS )rD   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   Ú	TypeErrorrD   Úbytes)r   rg   r   r   r   Ú
__reduce__F  s
    
zAuthenticationString.__reduce__N)r)   rc   rd   rj   r   r   r   r   rD   E  s   rD   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)rC   Z	semprefix)	r   r+   r!   r   r"   rD   r   Úurandomr   )r   r   r   r   r4   U  s    z_MainProcess.__init__c             C   s   d S )Nr   )r   r   r   r   rA   g  s    z_MainProcess.closeN)r)   rc   rd   r4   rA   r   r   r   r   rk   S  s   rk   rQ   é   ZSIGÚ_)!Ú__all__r   r[   ÚsignalrU   r`   Z_weakrefsetr   ÚpathÚabspathÚgetcwdZORIGINAL_DIRÚOSErrorr   r   r	   Úobjectr   ri   rD   rk   r   r3   r   rV   r   rN   r
   Ú__dict__Úitemsr0   Zsignumr,   r   r   r   r   Ú<module>
   s6   


  
