NfJ/&gdZddlZddlZddlZddlZddlZddlmZ ej ej Z n #e $rdZ YnwxYwdZ dZdZdZGdd eZGd d eZGd d eZGddeZdaeaejdaea[iZeej D] \Z!Z"e!dddkr de!vr de!ee" <![!["eZ#dS)) BaseProcesscurrent_processactive_childrenparent_processN)WeakSetctS)z@ Return process object representing the current process )_current_process./usr/lib/python3.11/multiprocessing/process.pyrr%s  r cFtttS)zN Return list of process objects corresponding to live child processes )_cleanuplist _childrenr r r rr+s JJJ  ??r ctS)z? Return process object representing the parent process )_parent_processr r r rr3s  r cttD]5}|jt|6dSN)rr_popenpolldiscard)ps r rr=sF )__!! 8==?? &   a !!r cneZdZdZdZddddifdddZdZdZd Zd Z d Z dd Z d Z dZ edZejdZedZejdZedZejdZedZedZeZedZdZddZedZdS)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 )daemoncN| Jdtt}tj|fz|_tj|_t j|_tj |_ d|_ d|_ ||_ t||_t!||_|p;t%|jdzdd|jDz|_|||_t.|dS)Nz#group argument must be None for nowF-:c34K|]}t|VdSr)str).0is r z'BaseProcess.__init__..^s(==c!ff======r )next_process_counterr _identity_configcopyosgetpid _parent_pidname _parent_namer_closed_targettuple_argsdict_kwargstype__name__join_namer _danglingadd)rgrouptargetr0argskwargsrcounts r __init__zBaseProcess.__init__Ps}}C}}}%&&)3uh>'/4466 9;;,1   4[[ F|| >T$ZZ036XX==dn=====>   DK dr c2|jrtddS)Nzprocess object is closed)r2 ValueErrorrs r _check_closedzBaseProcess._check_closedcs% < 9788 8 9 9r cF|jr|j|ji|jdSdS)zQ Method to be run in sub-process; can be overridden in sub-class N)r3r5r7rs r runzBaseProcess.rungs9 < 6 DL$* 5 5 5 5 5 5 6 6r c||j Jd|jtjks Jdt jdr Jdt| ||_|jj |_ |` |` |`t|dS)z% Start child process Nzcannot start a process twicez:can only start a process object created by current processrz3daemonic processes are not allowed to have children)rFrr/r-r.r r+getrrsentinel _sentinelr3r5r7rr=rs r startzBaseProcess.startns {""$B"""29;;...K/..#+//99 E ED E E E kk$'' - L$*dl dr c`||jdS)zT Terminate process; sends SIGTERM signal or uses TerminateProcess() N)rFr terminaters r rOzBaseProcess.terminates0  r c`||jdS)zT Terminate process; sends SIGKILL signal or uses TerminateProcess() N)rFrkillrs r rQzBaseProcess.kills0  r c ||jtjks Jd|j Jd|j|}|t |dSdS)z5 Wait until child process terminates zcan only join a child processNzcan only join a started process)rFr/r-r.rwaitrr)rtimeoutress r r:zBaseProcess.joins 29;;...0O...{&&(I&&&kw'' ?   d # # # # # ?r c||turdS|jtjks Jd|jdS|j}|dSt|dS)z1 Return whether process is alive Tzcan only test a child processNF) rFr r/r-r.rrrr)r returncodes r is_alivezBaseProcess.is_alives  # # #429;;...0O... ; 5[%%''  4   d # # #5r c|jd|jtd|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)rrrEcloserLrrr2rs r rZzBaseProcess.closesz ; "{!!) "PQQQ K     DK   d # # # r c|jSr)r;rs r r0zBaseProcess.names zr cRt|ts Jd||_dS)Nzname must be a string) isinstancer$r;)rr0s r r0zBaseProcess.names,$$$==&==== r c8|jddS)z4 Return whether process is a daemon rF)r+rJrs r rzBaseProcess.daemons |%000r c<|j Jd||jd<dS)z1 Set whether process is a daemon Nzprocess has already startedr)rr+)rdaemonics r rzBaseProcess.daemons- {""$A"""!) Xr c|jdS)Nauthkey)r+rs r rbzBaseProcess.authkeys|I&&r c4t||jd<dS)z2 Set authorization key of process rbN)AuthenticationStringr+)rrbs r rbzBaseProcess.authkeys #7w"?"? Yr cx||j|jS|jS)zM Return exit code of process or `None` if it has yet to stop )rFrrrs r exitcodezBaseProcess.exitcodes:  ; ; {!!!r c||turtjS|jo |jjS)zU Return identifier (PID) of process or `None` if it has yet to start )rFr r-r.rpidrs r identzBaseProcess.idents?  # # #9;; ;24;? 2r cv| |jS#t$rtddwxYw)z{ Return a file descriptor (Unix) or handle (Windows) suitable for waiting for process termination. zprocess not startedN)rFrLAttributeErrorrErs r rKzBaseProcess.sentinelsO  >> ! > > >233 = >s8cd}|turd}nS|jrd}nI|jtjkrd}n*|jd}n |j}|d}nd}t|jd|j zg}|j"| d|jj z| d|jz| ||3t ||}| d |z|jr| d d d |zS) Nstartedclosedunknowninitialstoppedzname=%rzpid=%sz parent=%sz exitcode=%srz<%s> )r r2r/r-r.rrr8r9r;appendrh_exitcode_to_namerJrr:)rrfstatusinfos r __repr__zBaseProcess.__repr__sF # # #FF \ #FF   , ,FF [ FF{''))H#""T #Y%;< ; " KK4;?2 3 3 3 K$"22333 F  (,,Xx@@H KK 0 1 1 1 ; " KK ! ! !&&r cddlm}m} |j||jt jdata | t}|a t|j |j|at jr%t!j |~n#~wxYw|d |d}|n#|wxYwn#t0$rl}|jd}nXt5|jt6r|j}n6t8jt?|jdzd}Yd}~nKd}~wd}ddl }t8jd|j!z|"YnxYwt!j#|d|z|$nD#t!j#|d|z|$wxYw|S)N)utilcontextz child process calling self.run()r z Process %s: z process exiting with exitcode %d)%rzr{ _start_method_force_start_method itertoolsrBr)setr _close_stdinr _ParentProcessr1r/r threading_HAVE_THREAD_NATIVE_ID main_thread_set_native_id _after_forkrvrH_exit_function SystemExitcoder]intsysstderrwriter$ tracebackr0 print_exc _shutdown_flush_std_streams)rparent_sentinelrzr{ old_processrfers r _bootstrapzBaseProcess._bootstrap"s|########( &!-++D,>???(q11 I      *K# ,!4#3_FFO/ 9%''66888   """ KK II8 9 9 9 & ##%%%%##%%%%%   v~AFC(( 6   QVt!3444 "H     J  _ty8 9 9 9    ! ! ! ! !   ! ! ! II88C D D D  # # % % % %   ! ! ! II88C D D D  # # % % % %scB,D.7C D. CD.)D?D.D**D.-H*. G'8A"FH*AG'%H**AI+clddlm}|j|dS)Nryrz)r}rz_finalizer_registryclear_run_after_forkersrs r rzBaseProcess._after_forkRsA  &&((( !!!!!r r)r9 __module__ __qualname____doc__rrCrFrHrMrOrQr:rXrZpropertyr0setterrrbrfrirhrKrwr staticmethodrr r r rrGs """"$T2&999666$    $ $ $ $&"X [[11X1  ]**]*''X' ^@@^@ ""X"33X3 C  > >X >'''>....`""\"""r rceZdZdZdS)rdcnddlm}|tdtt |ffS)Nry)get_spawning_popenzJPickling an AuthenticationString object is disallowed for security reasons)r{r TypeErrorrdbytes)rrs r __reduce__zAuthenticationString.__reduce__^sO//////     '2 $eDkk^33r N)r9rrrr r r rdrd]s#44444r rdc<eZdZdZdZedZddZeZdS)rcvd|_||_||_d|_d|_d|_||_i|_dS)Nr F)r*r;_pidr/rr2rLr+)rr0rhrKs r rCz_ParentProcess.__init__ns?    ! r c6ddlm}||jgd S)NrrSrTmultiprocessing.connectionrSrL)rrSs r rXz_ParentProcess.is_alivexs13333334(!44444r c|jSr)rrs r riz_ParentProcess.ident|s yr Nc8ddlm}||jg|dS)z6 Wait until parent process terminates rrrNr)rrTrSs r r:z_ParentProcess.joins6 433333 dn w//////r r) r9rrrCrXrrir:rhr r r rrlsb555X0000 CCCr rceZdZdZdZdS) _MainProcesscd|_d|_d|_d|_d|_t t jddd|_dS)Nr MainProcessF z/mp)rb semprefix) r*r;r/rr2rdr-urandomr+rs r rCz_MainProcess.__init__sN"   #7 2#G#G%*,, r cdSrr rs r rZz_MainProcess.closes r N)r9rrrCrZr r r rrs2,,,$     r rrySIG_r!)$__all__r-rsignalrr _weakrefsetrpathabspathgetcwd ORIGINAL_DIROSErrorrrrrobjectrrrdrrrr rBr)rrrtr__dict__itemsr0signumr<r r r rs:     7??929;;//LLLLL !!!O"O"O"O"O"&O"O"O"l444445444[B     ;   0<>>"9?1%% CEE  D..001100LD& BQBx3d??%/ZZ6'"& GII s'AAA