U e5d.@s8ddddgZddlZddlZddlZddlZddlZddlmZzej e Z Wne k rldZ YnXddZ ddZd dZd d ZGd ddeZGd ddeZGdddeZGdddeZdaeaedaea[iZeej D]0\Z!Z"e!dddkrde!krde!ee" <qeZ#dS) BaseProcesscurrent_processactive_childrenparent_processN)WeakSetcCstS)z@ Return process object representing the current process )_current_processrr//usr/lib64/python3.8/multiprocessing/process.pyr%scCstttS)zN Return list of process objects corresponding to live child processes )_cleanuplist _childrenrrrr r+scCstS)z? Return process object representing the parent process )_parent_processrrrr r3scCs*ttD]}|jdk rt|qdSN)r r _popenpolldiscard)prrr r =s r c@seZdZdZddZddddifddddZd d Zd d Zd dZddZ ddZ d,ddZ ddZ ddZ eddZejddZeddZejddZedd Zejd!d Zed"d#Zed$d%ZeZed&d'Zd(d)Zd-d*d+ZdS).rz Process objects represent activity that is run in a separate process The class is analogous to `threading.Thread` cCstdSr)NotImplementedErrorselfrrr _PopenMszBaseProcess._PopenNr)daemoncCstt}tj|f|_tj|_t|_tj |_ d|_ d|_ ||_ t||_t||_|pt|jdddd|jD|_|dk r||_t|dS)NF-:css|]}t|VqdSr)str).0irrr ^sz'BaseProcess.__init__..)next_process_counterr _identity_configcopyosgetpid _parent_pidname _parent_namer_closed_targettuple_argsdict_kwargstype__name__join_namer _danglingadd)rgrouptargetr&argskwargsrcountrrr __init__Ps     zBaseProcess.__init__cCs|jrtddS)Nzprocess object is closed)r( ValueErrorrrrr _check_closedcszBaseProcess._check_closedcCs|jr|j|j|jdS)zQ Method to be run in sub-process; can be overridden in sub-class N)r)r+r-rrrr rungszBaseProcess.runcCs>|t|||_|jj|_|`|`|`t |dS)z% Start child process N) r;r rrsentinel _sentinelr)r+r-r r3rrrr startns    zBaseProcess.startcCs||jdS)zT Terminate process; sends SIGTERM signal or uses TerminateProcess() N)r;r terminaterrrr r@szBaseProcess.terminatecCs||jdS)zT Terminate process; sends SIGKILL signal or uses TerminateProcess() N)r;rkillrrrr rAszBaseProcess.killcCs*||j|}|dk r&t|dS)z5 Wait until child process terminates N)r;rwaitr r)rtimeoutresrrr r0s zBaseProcess.joincCsJ||tkrdS|jdkr"dS|j}|dkr8dSt|dSdS)z1 Return whether process is alive TNF)r;rrrr r)r returncoderrr is_alives   zBaseProcess.is_alivecCsH|jdk r>|jdkr td|jd|_|`t|d|_dS)z Close the Process object. This method releases resources held by the Process object. It is an error to call this method if the child process is still running. Nz^Cannot close a process while it is still running. You should first call join() or terminate().T)rrr:closer>r rr(rrrr rGs   zBaseProcess.closecCs|jSrr1rrrr r&szBaseProcess.namecCs ||_dSrrH)rr&rrr r&scCs|jddS)z4 Return whether process is a daemon rF)r!getrrrr rszBaseProcess.daemoncCs||jd<dS)z1 Set whether process is a daemon rNr!)rZdaemonicrrr rscCs |jdS)NauthkeyrJrrrr rKszBaseProcess.authkeycCst||jd<dS)z2 Set authorization key of process rKN)AuthenticationStringr!)rrKrrr rKscCs"||jdkr|jS|jS)zM Return exit code of process or `None` if it has yet to stop N)r;rrrrrr exitcodes zBaseProcess.exitcodecCs*||tkrtS|jo$|jjSdS)zU Return identifier (PID) of process or `None` if it has yet to start N)r;rr#r$rpidrrrr identszBaseProcess.identcCs4|z|jWStk r.tddYnXdS)z{ Return a file descriptor (Unix) or handle (Windows) suitable for waiting for process termination. zprocess not startedN)r;r>AttributeErrorr:rrrr r=s zBaseProcess.sentinelcCsd}|tkrd}nL|jrd}n@|jtkr2d}n,|jdkrBd}n|j}|dk rZd}nd}t|jd|j g}|jdk r| d|jj | d|j| ||dk rt ||}| d ||jr| d d d |S) NZstartedclosedunknowninitialZstoppedzname=%rzpid=%sz parent=%sz exitcode=%srz<%s> )rr(r%r#r$rrr.r/r1appendrN_exitcode_to_namerIrr0)rrMZstatusinforrr __repr__s0      zBaseProcess.__repr__c Csvddlm}m}z>z|jdk r,||jt da t a |t}|at|j|j|atjrntz|j|W5~X|dz|d}W5|XWntk r}zJ|jsd}n:t|jdtr|jd}nt j!"t#|jddd}W5d}~XYn2d}ddl$}t j!"d|j%|&YnXW5t|d||X|S)N)utilcontextz process exiting with exitcode %dz child process calling self.run()r z Process %s: )'rZr[ threadingZ _shutdownrWZ_flush_std_streamsZ _start_methodZ_force_start_method itertoolsr8rsetr Z _close_stdinr_ParentProcessr'r%r Z_HAVE_THREAD_NATIVE_IDZ main_threadZ_set_native_idZ_finalizer_registryclearZ_run_after_forkersZ_exit_functionr< SystemExitr6 isinstanceintsysstderrwriter tracebackr& print_exc)rZparent_sentinelrZr[rMZ old_processerirrr _bootstrap"sR         zBaseProcess._bootstrap)N)N)r/ __module__ __qualname____doc__rr9r;r<r?r@rAr0rFrGpropertyr&setterrrKrMrOrNr=rXrlrrrr rGsD            c@seZdZddZdS)rLcCs,ddlm}|dkrtdtt|ffS)NrY)get_spawning_popenzJPickling an AuthenticationString object is disallowed for security reasons)r[rr TypeErrorrLbytes)rrrrrr __reduce__Xs   zAuthenticationString.__reduce__N)r/rmrnrurrrr rLWsrLc@s6eZdZddZddZeddZd dd ZeZdS) racCs4d|_||_||_d|_d|_d|_||_i|_dS)NrF)r r1_pidr%rr(r>r!)rr&rNr=rrr r9hsz_ParentProcess.__init__cCsddlm}||jgdd S)NrrBrCZmultiprocessing.connectionrBr>)rrBrrr rFrs z_ParentProcess.is_alivecCs|jSr)rvrrrr rOvsz_ParentProcess.identNcCs ddlm}||jg|ddS)z6 Wait until parent process terminates rrwrxNry)rrCrBrrr r0zs z_ParentProcess.join)N) r/rmrnr9rFrprOr0rNrrrr rafs    rac@seZdZddZddZdS) _MainProcesscCs8d|_d|_d|_d|_d|_ttddd|_dS)NrZ MainProcessF z/mp)rKZ semprefix) r r1r%rr(rLr#urandomr!rrrr r9s z_MainProcess.__init__cCsdSrrrrrr rGsz_MainProcess.closeN)r/rmrnr9rGrrrr rzsrzrYZSIG_r)$__all__r#rfsignalr_r^Z _weakrefsetrpathabspathgetcwdZ ORIGINAL_DIROSErrorrrrr objectrrtrLrarzr rr8rr`r rVr __dict__itemsr&Zsignumr2rrrr  s@    !