e f# @sydddgZddlZddlZddlZddlZddlmZyejjej Z Wne k rdZ YnXddZ ddZ dd ZGd ddeZGd d d eZGd ddeZeaejdaea[iZxSeejjD]<\ZZedddkr,dekr,eee Ssz'BaseProcess.__init__..)next_process_counterr _identity_configcopyosgetpid _parent_pidr _targettuple_argsdict_kwargstype__name__join_namer _danglingadd)rgrouptargetnameargskwargsrcountrrr__init__Gs   #  zBaseProcess.__init__cCs&|jr"|j|j|jndS)zQ Method to be run in sub-process; can be overridden in sub-class N)r"r$r&)rrrrrunXs zBaseProcess.runcCs9t|j||_|jj|_tj|dS)z% Start child process N)r rr sentinel _sentinelr r,)rrrrstart_s zBaseProcess.startcCs|jjdS)zT Terminate process; sends SIGTERM signal or uses TerminateProcess() N)r terminate)rrrrr8mszBaseProcess.terminatecCs2|jj|}|dk r.tj|ndS)z5 Wait until child process terminates N)r waitr r)rZtimeoutresrrrr)ss zBaseProcess.joincCs@|tkrdS|jdkr#dS|jj|jjdkS)z1 Return whether process is alive TNF)rr r returncode)rrrris_alive}s   zBaseProcess.is_alivecCs|jS)N)r*)rrrrr/szBaseProcess.namecCs ||_dS)N)r*)rr/rrrr/scCs|jjddS)z4 Return whether process is a daemon rF)rget)rrrrrszBaseProcess.daemoncCs||jdszBaseProcess.authkeycCst||jdN)AuthenticationStringr)rr>rrrr>scCs#|jdkr|jS|jjS)zM Return exit code of process or `None` if it has yet to stop N)r r )rrrrexitcodeszBaseProcess.exitcodecCs-|tkrtjS|jo(|jjSdS)zU Return identifier (PID) of process or `None` if it has yet to start N)rrr r pid)rrrridents  zBaseProcess.identc Cs0y |jSWntk r+tdYnXdS)z{ Return a file descriptor (Unix) or handle (Windows) suitable for waiting for process termination. zprocess not startedN)r6AttributeError ValueError)rrrrr5s  zBaseProcess.sentinelcCs|tkrd}n]|jtjkr3d}n?|jdkrKd}n'|jjdk rl|j}nd}t|tkr|dkrd}qdt j ||}ndt|j |j ||j rdpd fS) NZstartedunknowninitialrZstoppedz stopped[%s]z<%s(%s, %s%s)>z daemon)rr!rr r r r@r'int_exitcode_to_namer=r(r*r)rZstatusrrr__repr__s       zBaseProcess.__repr__c(Csddlm}m}zy|jdk r>|j|jntjdata t j dk ry#t j j t tjt _ Wqttfk rYqXnt}|az|jj|jWd~X|jdz|jd}Wd|jXWntk r}zd|js+d}nMt|jdtrQ|jd}n't jjt|jddd}WYdd}~Xn;d}ddl }t jjd|j!|j"YnXWd|jd|t j#j$t jj$X|S)N)utilcontextz child process calling self.run()r z Process %s: z process exiting with exitcode %d)%rGrLrMZ _start_methodZ_force_start_method itertoolsr2rsetr sysstdincloseopenrdevnullOSErrorrDrZ_finalizer_registryclearZ_run_after_forkersinfor4Z_exit_function SystemExitr0 isinstancerHstderrwriter tracebackr/ print_excstdoutflush)rrLrMZ old_processr@er]rrr _bootstrapsN        !  zBaseProcess._bootstrap)r( __module__ __qualname____doc__rr3r4r7r8r)r<propertyr/setterrr>r@rBrAr5rJrbrrrrr>s*         c@seZdZddZdS)r?cCsAddlm}|dkr.tdntt|ffS)NrK)get_spawning_popenzJPickling an AuthenticationString object is disallowed for security reasons)rMrh TypeErrorr?bytes)rrhrrr __reduce__s  zAuthenticationString.__reduce__N)r(rcrdrkrrrrr?s r?c@seZdZddZdS) _MainProcesscCsNf|_d|_d|_d|_ittjdd6dd6|_dS)NZ MainProcess r>z/mpZ semprefix)rr*r!r r?rurandomr)rrrrr3*s     z_MainProcess.__init__N)r(rcrdr3rrrrrl(s rlrKZSIG_) __all__rrQsignalrO _weakrefsetrpathabspathgetcwdZ ORIGINAL_DIRrVrrr objectrrjr?rlrr2rrPr rIr __dict__itemsr/Zsignumr+rrrr s0          ""