ó w®øQc@s2dddgZddlZddlZddlZddlZyejjejƒƒZWne k rtdZnXd„Z d„Z d„Z defd„ƒYZd efd „ƒYZd efd „ƒYZeƒa[iZxGejjƒD]6\ZZed dkrōdekrōeee 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!‹s cCs@|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( Ntstartedtunknowntinitialitstoppeds stopped[%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 t j ƒt_Wnt tfk rmnX|a|jjƒ|jƒ|jdƒz|jƒd}Wd|jƒXWnįtk rX}|jsßd}qŸt|jdtƒr|jd}qŸtjjt|jdƒdƒtjjƒt|jdtƒrOdnd}nGd}ddl}tjjd|jƒtjjƒ|j ƒnX|jd|ƒ|S( Ni(tutils child process calling self.run()is i’’’’s Process %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 ƒ|_ t t jdƒƒ|_d|_dS(Nt MainProcessii ((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__RRMtsignalRLtpathtabspathtgetcwdt ORIGINAL_DIRRRR RRRtobjectRRhR<RjRRFt__dict__titemsR&tsignum(((s-/sys/lib/python2.7/multiprocessing/process.pyt#s(        Ē