a XC?h�.�@s2gd�ZddlZddlZddlZddlZddlZddlmZzej� e� ��Z Wne yfdZ Yn0dd�Z dd�Zdd �Zd d �ZGd d �d e�ZGdd�de�ZGdd�de�ZGdd�de�Zdae�ae�d�ae�a[iZeej� ��D]0\Z!Z"e!dd�dkr�de!vr�de!��ee" <q�e�Z#dS))� BaseProcess�current_process�active_children�parent_process�N)�WeakSetcCstS�N)�_current_process�r r �^�z'BaseProcess.__init__..)�next�_process_counterr� _identity�_config�copy�os�getpid� _parent_pid�name� _parent_namer�_closed�_target�tuple�_args�dict�_kwargs�type�__name__�join�_namer� _dangling�add)r�group�targetr'�args�kwargsr�countr r r �__init__Ps     �zBaseProcess.__init__cCs|jrtd��dS)Nzprocess object is closed)r)� ValueErrorrr r r � _check_closedcszBaseProcess._check_closedcCs|jr|j|ji|j��dSr)r*r,r.rr r r �rungszBaseProcess.runcCs>|��t�|�|�|_|jj|_|`|`|`t � |�dSr) r<r rr�sentinel� _sentinelr*r,r.r r4rr r r �startns    zBaseProcess.startcCs|��|j��dSr)r<r� terminaterr r r rA�szBaseProcess.terminatecCs|��|j��dSr)r<r�killrr r r rB�szBaseProcess.killcCs*|��|j�|�}|dur&t�|�dSr)r<r�waitr r)r�timeout�resr r r r1�s zBaseProcess.joincCsJ|��|turdS|jdur"dS|j��}|dur8dSt�|�dSdS)NTF)r<rrrr r)r� returncoder r r �is_alive�s   zBaseProcess.is_alivecCsH|jdur>|j��dur td��|j��d|_|`t�|�d|_dS)Nz^Cannot close a process while it is still running. You should first call join() or terminate().T)rrr;�closer?r rr)rr r r rH�s   zBaseProcess.closecCs|jSr�r2rr r r r'�szBaseProcess.namecCs ||_dSrrI)rr'r r r r'�scCs|j�dd�S)NrF)r"�getrr r r r�szBaseProcess.daemoncCs||jd<dS)Nr�r")rZdaemonicr r r r�scCs |jdS�N�authkeyrKrr r r rM�szBaseProcess.authkeycCst|�|jd<dSrL)�AuthenticationStringr")rrMr r r rM�scCs"|��|jdur|jS|j��Sr)r<rrrr r r �exitcode�s zBaseProcess.exitcodecCs*|��|turt��S|jo$|jjSdSr)r<rr$r%r�pidrr r r �ident�szBaseProcess.identcCs2|��z|jWSty,td�d�Yn0dS)Nzprocess not started)r<r?�AttributeErrorr;rr r r r>�s  zBaseProcess.sentinelcCs�d}|turd}nL|jrd}n@|jt��kr2d}n,|jdurBd}n|j��}|durZd}nd}t|�jd|j g}|jdur�|� d|jj �|� d|j�|� |�|dur�t � ||�}|� d |�|jr�|� d �d d �|�S) NZstarted�closed�unknown�initialZstoppedzname=%rzpid=%sz parent=%sz exitcode=%srz<%s>� )rr)r&r$r%rrr/r0r2�appendrP�_exitcode_to_namerJrr1)rrOZstatus�infor r r �__repr__s0      zBaseProcess.__repr__c Cs�ddlm}m}�z`z�|jdur,|�|j�t�d�at�a |� �t }|a t |j |j|�atjrnt����z|j��|��W~n~0|�d�z|��d}W|��n |��0Wn�t�y }zJ|jdur�d}n.t|jt�r�|j}ntj� t!|j�d�d}WYd}~n:d}~0d}ddl"}tj� d|j#�|�$�Yn0Wt�%�|�d|�|�&�n t�%�|�d|�|�&�0|S)N�)�util�contextz child process calling self.run()r� z Process %s: z process exiting with exitcode %d)'�r\r]Z _start_methodZ_force_start_method� itertoolsr9r �setr Z _close_stdinr�_ParentProcessr(r&r� threadingZ_HAVE_THREAD_NATIVE_IDZ main_threadZ_set_native_idZ_finalizer_registry�clearZ_run_after_forkersrYr=Z_exit_function� SystemExit�code� isinstance�int�sys�stderr�writer� tracebackr'� print_excZ _shutdownZ_flush_std_streams)rZparent_sentinelr\r]Z old_processrO�erlr r r � _bootstrap"sT    �       � zBaseProcess._bootstrap)N)N)r0� __module__� __qualname__rr:r<r=r@rArBr1rGrH�propertyr'�setterrrMrOrQrPr>rZror r r r rGsB �           rc@seZdZdd�ZdS)rNcCs,ddlm}|�durtd��tt|�ffS)Nr[)�get_spawning_popenzJPickling an AuthenticationString object is disallowed for security reasons)r]rt� TypeErrorrN�bytes)rrtr r r � __reduce__Xs   �zAuthenticationString.__reduce__N)r0rprqrwr r r r rNWsrNc@s6eZdZdd�Zdd�Zedd��Zd dd �ZeZdS) rbcCs4d|_||_||_d|_d|_d|_||_i|_dS)Nr F)r!r2�_pidr&rr)r?r")rr'rPr>r r r r:hsz_ParentProcess.__init__cCsddlm}||jgdd� S�Nr)rC)rD�Zmultiprocessing.connectionrCr?)rrCr r r rGrs z_ParentProcess.is_alivecCs|jSr)rxrr r r rQvsz_ParentProcess.identNcCs ddlm}||jg|d�dSryrz)rrDrCr r r r1zs z_ParentProcess.join)N) r0rprqr:rGrrrQr1rPr r r r rbfs    rbc@seZdZdd�Zdd�ZdS)� _MainProcesscCs8d|_d|_d|_d|_d|_tt�d��dd�|_dS)Nr Z MainProcessF� z/mp)rMZ semprefix) r!r2r&rr)rNr$�urandomr"rr r r r:�s �z_MainProcess.__init__cCsdSrr rr r r rH�sz_MainProcess.closeN)r0rprqr:rHr r r r r{�sr{r[�ZSIG�_r)$�__all__r$ri�signalr`rcZ _weakrefsetr�path�abspath�getcwdZ ORIGINAL_DIR�OSErrorrrrr �objectrrvrNrbr{rrr9r rar rXr �__dict__�itemsr'Zsignumr3r r r r � s<     !