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 )daemonc6|Jdtt}tj|fz|_tjj |_t j|_tj|_ d|_ d|_ ||_ t||_t!||_|xs;t%|j&dzdj)d|jDz|_|||_t.j1|y)Nz#group argument must be None for nowF-: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}CCC}%&)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|j|jJd|jtjk(sJdt j jdrJdt|j||_|jj|_ |` |` |`tj!|y)z% Start child process Nzcannot start a process twicez:can only start a process object created by current processr z3daemonic processes are not allowed to have children)rGrr0r.r/r r,getrrsentinel _sentinelr4r6r8rr>rs r startzBaseProcess.startns {{"B$BB"299;. LK L.#++//9 ED E9 kk$' -- L$*dl dr cX|j|jjy)zT Terminate process; sends SIGTERM signal or uses TerminateProcess() N)rGr terminaters r rPzBaseProcess.terminates   r cX|j|jjy)zT Terminate process; sends SIGKILL signal or uses TerminateProcess() N)rGrkillrs r rRzBaseProcess.kills   r c|j|jtjk(sJd|jJd|jj |}|t j|yy)z5 Wait until child process terminates zcan only join a child processNzcan only join a started process)rGr0r.r/rwaitrr)rtimeoutress r r;zBaseProcess.joinsr 299;.O0OO.{{&I(II&kkw' ?   d # r c|j|tury|jtjk(sJd|j y|j j }|ytj|y)z1 Return whether process is alive Tzcan only test a child processF) rGr r0r.r/rrrr)r returncodes r is_alivezBaseProcess.is_alivesu  # #299;.O0OO. ;; [[%%'     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)rrrFcloserMrrr3rs r r[zBaseProcess.closesg ;; "{{!) "PQQ KK   DK   d # r c|jSr)r<rs r r1zBaseProcess.names zzr c@t|tsJd||_y)Nzname must be a string) isinstancer%r<)rr1s r r1zBaseProcess.names$$=&==$ r c:|jjddS)z4 Return whether process is a daemon r F)r,rKrs r r zBaseProcess.daemons ||%00r cH|jJd||jd<y)z1 Set whether process is a daemon Nzprocess has already startedr )rr,)rdaemonics r r zBaseProcess.daemons( {{"A$AA"!) Xr c |jdS)Nauthkey)r,rs r rczBaseProcess.authkeys||I&&r c4t||jd<y)z2 Set authorization key of process rcN)AuthenticationStringr,)rrcs r rczBaseProcess.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)rGrMAttributeErrorrFrs r rLzBaseProcess.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<appendri_exitcode_to_namerKr r;)rrgstatusinfos 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_forkrwrI_exit_function SystemExitcoder^intsysstderrwriter% tracebackr1 print_exc _shutdown_flush_std_streams)rparent_sentinelr{r| old_processrgers 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)Nrzr{)r~r{_finalizer_registryclear_run_after_forkersrs r rzBaseProcess._after_forkRs#   &&( !r r)r: __module__ __qualname____doc__rrDrGrIrNrPrRr;rYr[propertyr1setterr rcrgrjrirLrxr staticmethodrr r r rrGs4 ""$T2&96$  $&" [[11  ]]**'' ^^@@ ""33 C  > >'>.`""r rceZdZdZy)recVddlm}| tdtt |ffS)Nrz)get_spawning_popenzJPickling an AuthenticationString object is disallowed for security reasons)r|r TypeErrorrebytes)rrs r __reduce__zAuthenticationString.__reduce__^s3/   '2 $eDk^33r N)r:rrrr r r rere]s4r rec4eZdZdZdZedZddZeZy)rctd|_||_||_d|_d|_d|_||_i|_y)Nr F)r+r<_pidr0rr3rMr,)rr1rirLs r rDz_ParentProcess.__init__ns;    ! r c:ddlm}||jgd S)NrrTrUmultiprocessing.connectionrTrM)rrTs r rYz_ParentProcess.is_alivexs3(!444r c|jSr)rrs r rjz_ParentProcess.ident|s yyr Nc:ddlm}||jg|y)z6 Wait until parent process terminates rrrNr)rrUrTs r r;z_ParentProcess.joins 4 dnn w/r r) r:rrrDrYrrjr;rir r r rrls,50 Cr rceZdZdZdZy) _MainProcesscd|_d|_d|_d|_d|_t t jddd|_y)Nr MainProcessF z/mp)rc semprefix) r+r<r0rr3rer.urandomr,rs r rDz_MainProcess.__init__sB"   #7 2#G%*, r cyrr rs r r[z_MainProcess.closes r N)r:rrrDr[r r r rrs ,$ r rrzSIG_r")$__all__r.rsignalrr _weakrefsetrpathabspathgetcwd ORIGINAL_DIROSErrorrrrrobjectrrrerrrr rCr*rrrur__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: