gk/gdZddlZddlZddlZddlZddlZddlmZ ejjejZ dZ dZdZdZGdd eZGd d eZGd d eZGddeZdaeaej2daea[iZeej>jAD]\Z!Z"e!dddk(sde!vsde!ee" <[!["eZ#y#e $rdZ YwxYw)) BaseProcesscurrent_processactive_childrenparent_processN)WeakSetctS)z@ Return process object representing the current process )_current_process>/opt/alt/python312/lib64/python3.12/multiprocessing/process.pyrr%s  r c4tttS)zN Return list of process objects corresponding to live child processes )_cleanuplist _childrenr r r rr+s J  ?r ctS)z? Return process object representing the parent process )_parent_processr r r rr3s  r cttD]7}|jx}s|j#tj |9yN)rr_popenpolldiscard)p child_popens r rr=s; )_88 #K #)9)9);)G   a r cNeZdZdZdZddddifdddZdZdZd Zd Z d Z dd Z d Z dZ edZej dZedZej dZedZej dZedZedZeZedZdZddZedZy)rz Process objects represent activity that is run in a separate process The class is analogous to `threading.Thread` ctr)NotImplementedErrorselfs r _PopenzBaseProcess._PopenMs!!r Nr )daemonc$tt}tj|fz|_tjj |_t j|_tj|_ d|_ d|_ ||_ t||_t!||_|xs;t%|j&dzdj)d|jDz|_|||_t.j1|y)NF-:c32K|]}t|ywr)str).0is r z'BaseProcess.__init__..^s=nc!fns)next_process_counterr _identity_configcopyosgetpid _parent_pidname _parent_namer_closed_targettuple_argsdict_kwargstype__name__join_namer _danglingadd)rgrouptargetr1argskwargsr counts r __init__zBaseProcess.__init__Ps%&)33uh>'//446 99;,11   4[ F| >T$Z0036XX=dnn==>   DK dr c2|jr tdy)Nzprocess object is closed)r3 ValueErrorrs r _check_closedzBaseProcess._check_closedcs <<78 8 r cj|jr'|j|ji|jyy)zQ Method to be run in sub-process; can be overridden in sub-class N)r4r6r8rs r runzBaseProcess.rungs+ << DLL$** 5 5 r c|jt|j||_|jj|_|`|`|`tj|y)z% Start child process N) rGrrrsentinel _sentinelr4r6r8rr>rs r startzBaseProcess.startnsS   kk$' -- L$*dl dr cX|j|jjy)zT Terminate process; sends SIGTERM signal or uses TerminateProcess() N)rGr terminaters r rOzBaseProcess.terminates   r cX|j|jjy)zT Terminate process; sends SIGKILL signal or uses TerminateProcess() N)rGrkillrs r rQzBaseProcess.kills   r c|j|jj|}|tj |yy)z5 Wait until child process terminates N)rGrwaitrr)rtimeoutress r r;zBaseProcess.joins> kkw' ?   d # r c|j|tury|jy|jj}|ytj |y)z1 Return whether process is alive TF)rGr rrrr)r returncodes r is_alivezBaseProcess.is_alivesW  # # ;; [[%%'     d #r c|j]|jj td|jjd|_|`t j |d|_y)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)rrrFcloserLrrr3rs r rZzBaseProcess.closesg ;; "{{!) "PQQ KK   DK   d # r c|jSrr<rs r r1zBaseProcess.names zzr c||_yrr\)rr1s r r1zBaseProcess.names  r c:|jjddS)z4 Return whether process is a daemon r F)r,getrs r r zBaseProcess.daemons ||%00r c"||jd<y)z1 Set whether process is a daemon r Nr,)rdaemonics r r zBaseProcess.daemons "* Xr c |jdS)Nauthkeyrars r rdzBaseProcess.authkeys||I&&r c4t||jd<y)z2 Set authorization key of process rdN)AuthenticationStringr,)rrds r rdzBaseProcess.authkeys #7w"? Yr c|j|j |jS|jjS)zM Return exit code of process or `None` if it has yet to stop )rGrrrs r exitcodezBaseProcess.exitcodes7  ;; ;; {{!!r c|j|turtjS|jxr|jj S)zU Return identifier (PID) of process or `None` if it has yet to start )rGr r.r/rpidrs r identzBaseProcess.idents<  # #99; ;;24;;?? 2r cn|j |jS#t$r tddwxYw)z{ Return a file descriptor (Unix) or handle (Windows) suitable for waiting for process termination. zprocess not startedN)rGrLAttributeErrorrFrs r rKzBaseProcess.sentinels<  >>> ! >23 = >s 4cd}|turd}nc|jrd}nT|jtjk7rd}n0|j d}n!|j j }|d}nd}t|jd|jzg}|j (|jd|j jz|jd|jz|j||*tj||}|jd |z|jr|jd d d j|zS) Nstartedclosedunknowninitialstoppedzname=%rzpid=%sz parent=%sz exitcode=%sr z<%s> )r r3r0r.r/rrr9r:r<appendrj_exitcode_to_namer_r r;)rrhstatusinfos r __repr__zBaseProcess.__repr__s # #F \\F    ,F [[ F{{'')H#""T ##Y%;< ;; " KK4;;??2 3 K$"2"223 F  (,,Xx@H KK 0 1 ;; KK !&&r cddlm}m} |j|j |jt j data |jt}|a t|j|j|at j"r"t!j$j' |j)~|j+d |j-d}|j/ t!jF|j+d|z|jI|S#~wxYw#|j/wxYw#t0$rw}|j2d}n^t5|j2t6r |j2}n7t8j:j=t?|j2dzd}Yd}~d}~wd}ddl }t8j:j=d|jBz|jEYxYw#t!jF|j+dz|jIwxYw)N)utilcontextz child process calling self.run()r z Process %s: z process exiting with exitcode %d)%r|r} _start_method_force_start_method itertoolsrCr*setr _close_stdinr _ParentProcessr2r0r threading_HAVE_THREAD_NATIVE_ID main_thread_set_native_id _after_forkrxrI_exit_function SystemExitcode isinstanceintsysstderrwriter% tracebackr1 print_exc _shutdown_flush_std_streams)rparent_sentinelr|r} old_processrhers r _bootstrapzBaseProcess._bootstrap"s#( &!!-++D,>,>?(q1 I    *K# ,!!4#3#3_FO//%%'668   " II8 9 & ##%    ! II88C D  # # %3 ##% vv~AFFC(66   QVVt!34 "H  JJ  _tyy8 9    !    ! II88C D  # # %sbB1E<D< EE1EH<D??EEE H A-G HAHH:Icdddlm}|jj|j y)Nr{r|)rr|_finalizer_registryclear_run_after_forkersrs r rzBaseProcess._after_forkRs#   &&( !r r)r: __module__ __qualname____doc__rrDrGrIrMrOrQr;rXrZpropertyr1setterr rdrhrkrjrKryr staticmethodrr r r rrGs4 ""$T2&96$  $&" [[11  ]]**'' ^^@@ ""33 C  > >'>.`""r rceZdZdZy)rfcVddlm}| tdtt |ffS)Nr{)get_spawning_popenzJPickling an AuthenticationString object is disallowed for security reasons)r}r TypeErrorrfbytes)rrs r __reduce__zAuthenticationString.__reduce__^s3/   '2 $eDk^33r N)r:rrrr r r rfrf]s4r rfc4eZdZdZdZedZddZeZy)rctd|_||_||_d|_d|_d|_||_i|_y)Nr F)r+r<_pidr0rr3rLr,)rr1rjrKs r rDz_ParentProcess.__init__ns;    ! r c:ddlm}||jgd S)NrrSrTmultiprocessing.connectionrSrL)rrSs r rXz_ParentProcess.is_alivexs3(!444r c|jSr)rrs r rkz_ParentProcess.ident|s yyr Nc:ddlm}||jg|y)z6 Wait until parent process terminates rrrNr)rrTrSs r r;z_ParentProcess.joins 4 dnn w/r r) r:rrrDrXrrkr;rjr r r rrls,50 Cr rceZdZdZdZy) _MainProcesscd|_d|_d|_d|_d|_t t jddd|_y)Nr MainProcessF z/mp)rd semprefix) r+r<r0rr3rfr.urandomr,rs r rDz_MainProcess.__init__sB"   #7 2#G%*, r cyrr rs r rZz_MainProcess.closes r N)r:rrrDrZr r r rrs ,$ r rr{SIG_r")$__all__r.rsignalrr _weakrefsetrpathabspathgetcwd ORIGINAL_DIROSErrorrrrrobjectrrrfrrrr rCr*rrrvr__dict__itemsr1signumr=r r r rs&   77??9299;/L !O"&O"l454[B ; 0>"9??1% E  ..01LD& BQx3d?'(Z6'"2 & I s Ls*C00C:9C: