B ©íïE¼"ã@sdddgZddlZddlZddlZddlZddlZddlmZyej  e  ¡¡Z Wne k rjdZ YnXdd„Z dd„Zdd „ZGd d„deƒZGd d „d eƒZGd d„deƒZeƒae d¡aeƒa[iZxUsz'BaseProcess.__init__..)Ú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ÚcountrrrÚ__init__Hs    zBaseProcess.__init__cCs|jrtdƒ‚dS)Nzprocess object is closed)r"Ú ValueError)rrrrÚ _check_closedZszBaseProcess._check_closedcCs|jr|j|j|jŽdS)N)r#r%r')rrrrÚrun^szBaseProcess.runcCs>| ¡tƒ| |¡|_|jj|_|`|`|`t   |¡dS)N) r6r rr ÚsentinelÚ _sentinelr#r%r'r r-)rrrrÚstartes    zBaseProcess.startcCs| ¡|j ¡dS)N)r6r Ú terminate)rrrrr;wszBaseProcess.terminatecCs| ¡|j ¡dS)N)r6r Úkill)rrrrr<~szBaseProcess.killcCs*| ¡|j |¡}|dk r&t |¡dS)N)r6r Úwaitr r)rZtimeoutZresrrrr*…s zBaseProcess.joincCsJ| ¡|tkrdS|jdkr"dS|j ¡}|dkr8dSt |¡dSdS)NTF)r6rr r r r)rÚ returncoderrrÚis_alives   zBaseProcess.is_alivecCsH|jdk r>|j ¡dkr tdƒ‚|j ¡d|_|`t |¡d|_dS)Nz^Cannot close a process while it is still running. You should first call join() or terminate().T)r r r5Úcloser9r rr")rrrrr@£s   zBaseProcess.closecCs|jS)N)r+)rrrrr0´szBaseProcess.namecCs ||_dS)N)r+)rr0rrrr0¸scCs|j dd¡S)NrF)rÚget)rrrrr½szBaseProcess.daemoncCs||jd<dS)Nr)r)rZdaemonicrrrrÄscCs |jdS)NÚauthkey)r)rrrrrBÌszBaseProcess.authkeycCst|ƒ|jd<dS)NrB)ÚAuthenticationStringr)rrBrrrrBÐscCs"| ¡|jdkr|jS|j ¡S)N)r6r r )rrrrÚexitcode×s zBaseProcess.exitcodecCs*| ¡|tkrt ¡S|jo$|jjSdS)N)r6rrr r Úpid)rrrrÚidentászBaseProcess.identcCs2| ¡y|jStk r,tdƒd‚YnXdS)Nzprocess not started)r6r9ÚAttributeErrorr5)rrrrr8îs zBaseProcess.sentinelcCs¤|tkrd}nJ|jrd}n>|jt ¡kr.d}n*|jdkr>d}n|j ¡dk rT|j}nd}t|ƒt kr‚|dkrrd}ndt   ||¡}dt|ƒj |j ||jrœd pžd fS) NZstartedÚclosedÚunknownÚinitialrZstoppedz stopped[%s]z<%s(%s, %s%s)>z daemonÚ)rr"r!rr r r rDr(ÚintÚ_exitcode_to_namerAr)r+r)rÚstatusrrrÚ__repr__ús"  zBaseProcess.__repr__c CsRddlm}m}zy||jdk r,| |j¡t d¡atƒa |  ¡t }|a z|j   ¡| ¡Wd~X| d¡z| ¡d}Wd| ¡XWn˜tk rø}zJ|js®d}n:t|jdtƒrÊ|jd}ntj t|jdƒd¡d}Wdd}~XYn2d}ddl}tj d|j¡| ¡YnXWdt ¡| d|¡| ¡X|S)Né)ÚutilÚcontextz child process calling self.run()rÚ z Process %s: z process exiting with exitcode %d) rKrQrRZ _start_methodZ_force_start_methodÚ itertoolsr3rÚsetr Z _close_stdinrZ_finalizer_registryÚclearZ_run_after_forkersÚinfor7Z_exit_functionÚ SystemExitr1Ú isinstancerLÚsysÚstderrÚwriterÚ tracebackr0Ú print_excÚ threadingZ _shutdownZ_flush_std_streams)rrQrRZ old_processrDÚer]rrrÚ _bootstrapsD        zBaseProcess._bootstrap)N)r)Ú __module__Ú __qualname__rr4r6r7r:r;r<r*r?r@Úpropertyr0ÚsetterrrBrDrFrEr8rOrarrrrr?s.       c@seZdZdd„ZdS)rCcCs,ddlm}|ƒdkrtdƒ‚tt|ƒffS)NrP)Úget_spawning_popenzJPickling an AuthenticationString object is disallowed for security reasons)rRrfÚ TypeErrorrCÚbytes)rrfrrrÚ __reduce__Fs   zAuthenticationString.__reduce__N)r)rbrcrirrrrrCEsrCc@seZdZdd„Zdd„ZdS)Ú _MainProcesscCs8d|_d|_d|_d|_d|_tt d¡ƒddœ|_dS)NrZ MainProcessFé z/mp)rBZ semprefix) rr+r!r r"rCrÚurandomr)rrrrr4Us z_MainProcess.__init__cCsdS)Nr)rrrrr@gsz_MainProcess.closeN)r)rbrcr4r@rrrrrjSsrjrPéZSIGÚ_)!Ú__all__rrZÚsignalrTr_Z _weakrefsetrÚpathÚabspathÚgetcwdZ ORIGINAL_DIRÚOSErrorrrr ÚobjectrrhrCrjrr3rrUr rMr Ú__dict__Úitemsr0Zsignumr,rrrrÚ s6