�`^c@s2dddgZddlZddlZddlZddlZyejjej��ZWne k
rtdZnXd�Zd�Zd�Z
defd��YZd efd
��YZdefd��YZe�a[iZxGejj�D]6\ZZed
dkr�ekr�ee<q�WdS(tProcesstcurrent_processtactive_childreni�NcCstS(s@
Return process object representing the current process
(t_current_process(((s-/sys/lib/python2.7/multiprocessing/process.pyR;scCst�ttj�S(sN
Return list of process objects corresponding to live child processes
(t_cleanuptlistRt _children(((s-/sys/lib/python2.7/multiprocessing/process.pyRAscCsFx?ttj�D].}|jj�dk rtjj|�qqWdS(N(RRRt_popentpolltNonetdiscard(tp((s-/sys/lib/python2.7/multiprocessing/process.pyRLscBs�eZdZdZddddid�Zd�Zd�Zd�Zdd�Z d�Z
ed��Zej
d��Zed ��Zej
d
��Zed��Zej
d��Zed
��Zed��ZeZd�Zd�ZRS(s�
Process objects represent activity that is run in a separate process
The class is analagous to `threading.Thread`
cCs�tjj�}tj|f|_tj|_tj|_tj|_tj�|_ d|_||_t
|�|_t|�|_|p�t|�jddjd�|jD��|_dS(Nt-t:css|]}t|�VqdS(N(tstr(t.0ti((s-/sys/lib/python2.7/multiprocessing/process.pys <genexpr>ks(Rt_countertnextt _identityt_authkeyt _daemonict_tempdirtostgetpidt_parent_pidR Rt_targetttuplet_argstdictt_kwargsttypet__name__tjoint_name(tselftgroupttargettnametargstkwargstcount((s-/sys/lib/python2.7/multiprocessing/process.pyt__init__^s cCs&|jr"|j|j|j�ndS(sQ
Method to be run in sub-process; can be overridden in sub-class
N(RRR(R#((s-/sys/lib/python2.7/multiprocessing/process.pytrunms cCsUt�|jdk r"|j}nddlm}||�|_tjj|�dS(s%
Start child process
i(tPopenN( Rt_PopenR tforkingR,RRRtadd(R#R,((s-/sys/lib/python2.7/multiprocessing/process.pytstartts cCs|jj�dS(sT
Terminate process; sends SIGTERM signal or uses TerminateProcess()
N(Rt terminate(R#((s-/sys/lib/python2.7/multiprocessing/process.pyR1�scCs5|jj|�}|dk r1tjj|�ndS(s5
Wait until child process terminates
N(RtwaitR RRR
(R#ttimeouttres((s-/sys/lib/python2.7/multiprocessing/process.pyR!�scCs@|tkrtS|jdkr#tS|jj�|jjdkS(s1
Return whether process is alive
N(RtTrueRR tFalseRt
returncode(R#((s-/sys/lib/python2.7/multiprocessing/process.pytis_alive�s
cCs|jS(N(R"(R#((s-/sys/lib/python2.7/multiprocessing/process.pyR&�scCs
||_dS(N(R"(R#R&((s-/sys/lib/python2.7/multiprocessing/process.pyR&�scCs|jS(s4
Return whether process is a daemon
(R(R#((s-/sys/lib/python2.7/multiprocessing/process.pytdaemon�scCs
||_dS(s1
Set whether process is a daemon
N(R(R#tdaemonic((s-/sys/lib/python2.7/multiprocessing/process.pyR9�scCs|jS(N(R(R#((s-/sys/lib/python2.7/multiprocessing/process.pytauthkey�scCst|�|_dS(s2
Set authorization key of process
N(tAuthenticationStringR(R#R;((s-/sys/lib/python2.7/multiprocessing/process.pyR;�scCs#|jdkr|jS|jj�S(sM
Return exit code of process or `None` if it has yet to stop
N(RR R(R#((s-/sys/lib/python2.7/multiprocessing/process.pytexitcode�scCs-|tkrtj�S|jo(|jjSdS(sU
Return identifier (PID) of process or `None` if it has yet to start
N(RRRRtpid(R#((s-/sys/lib/python2.7/multiprocessing/process.pytident�s
cCs�|tkrd}n]|jtj�kr3d}n?|jdkrKd}n'|jj�dk rl|j}nd}t|�t kr�|dkr�d}q�dt
j||�}ndt|�j|j
||jr�dp�d fS(
Ntstartedtunknowntinitialitstoppedsstopped[%s]s<%s(%s, %s%s)>s daemont(RRRRRR RR=Rtintt_exitcode_to_nametgetR R"R(R#tstatus((s-/sys/lib/python2.7/multiprocessing/process.pyt__repr__�s cCs�ddlm}y�t�|_tjd�|_y#tjj �t
tj�t_Wnt
tfk
rmnX|a|jj�|j�|jd�z|j�d}Wd|j�XWn�tk
r<}|js�d}q�t|jdt�r|jd}q�tjjt|jd�d�tjj�d}nGd}ddl}tjjd|j�tjj�|j �nX|jd|�|S( Ni(tutils child process calling self.run()is
i�sProcess %s:
s process exiting with exitcode %d(!RDRJtsetRt itertoolsR)RtsyststdintclosetopenRtdevnulltOSErrort
ValueErrorRt_finalizer_registrytcleart_run_after_forkerstinfoR+t_exit_functiont
SystemExitR't
isinstanceREtstderrtwriteRtflusht tracebackR&t print_exc(R#RJR=teR^((s-/sys/lib/python2.7/multiprocessing/process.pyt
_bootstrap�sB
!
N((R t
__module__t__doc__R R-R*R+R0R1R!R8tpropertyR&tsetterR9R;R=R?R>RIRa(((s-/sys/lib/python2.7/multiprocessing/process.pyRVs&
R<cBseZd�ZRS(cCs>ddlm}|j�s+td��ntt|�ffS(Ni(R,sJPickling an AuthenticationString object is disallowed for security reasons(R.R,tthread_is_spawningt TypeErrorR<tbytes(R#R,((s-/sys/lib/python2.7/multiprocessing/process.pyt
__reduce__s
(R RbRi(((s-/sys/lib/python2.7/multiprocessing/process.pyR<st_MainProcesscBseZd�ZRS(cCspd|_t|_d|_d|_d|_tjd�|_ t
�|_tt
jd��|_d|_dS(NtMainProcessii ((RR6RR"R RRRLR)RRKRR<RturandomRR(R#((s-/sys/lib/python2.7/multiprocessing/process.pyR*-s (R RbR*(((s-/sys/lib/python2.7/multiprocessing/process.pyRj+sitSIGt_(t__all__RRMtsignalRLtpathtabspathtgetcwdtORIGINAL_DIRRRR RRRtobjectRRhR<RjRRFt__dict__titemsR&tsignum(((s-/sys/lib/python2.7/multiprocessing/process.pyt<module>#s(
�
|