o ?Og9/ã@s2gd¢ZddlZddlZddlZddlZddlZddlmZz ej  e  ¡¡Z Wn e y3dZ Ynwdd„Z dd„Zdd „Zd d „ZGd d „d eƒZGdd„deƒZGdd„deƒZGdd„deƒZdaeƒae d¡aeƒa[iZeej  ¡ƒD]\Z!Z"e!dd…dkr“de!vr“de!›ee" <q{eƒZ#dS))Ú BaseProcessÚcurrent_processÚactive_childrenÚparent_processéN)ÚWeakSetcCótS)z@ Return process object representing the current process )Ú_current_process©r r ú>/opt/alt/python310/lib64/python3.10/multiprocessing/process.pyr%órcCstƒttƒS)zN Return list of process objects corresponding to live child processes )Ú_cleanupÚlistÚ _childrenr r r r r+srcCr)z? Return process object representing the parent process )Ú_parent_processr r r r r3r rcCs*ttƒD]}|j ¡durt |¡qdS©N)r rÚ_popenÚpollÚdiscard)Úpr r r r =s  €þr c@seZdZdZdd„Zddddifddœdd„Zd d „Zd d „Zd d„Zdd„Z dd„Z d.dd„Z dd„Z dd„Z edd„ƒZejdd„ƒZedd„ƒZejdd„ƒZedd „ƒZejd!d „ƒZed"d#„ƒZed$d%„ƒZeZed&d'„ƒZd(d)„Zd.d*d+„Zed,d-„ƒZdS)/rz€ Process objects represent activity that is run in a separate process The class is analogous to `threading.Thread` cCst‚r)ÚNotImplementedError©Úselfr r r Ú_PopenMózBaseProcess._PopenNr )ÚdaemoncCs ttƒ}tj|f|_tj ¡|_t ¡|_tj |_ d|_ d|_ ||_ t|ƒ|_t|ƒ|_|p@t|ƒjdd dd„|jDƒ¡|_|durI||_t |¡dS)NFú-ú:css|]}t|ƒVqdSr)Ústr)Ú.0Úir r r Ú ^s€z'BaseProcess.__init__..)ÚnextÚ_process_counterrÚ _identityÚ_configÚcopyÚosÚgetpidÚ _parent_pidÚnameÚ _parent_namerÚ_closedÚ_targetÚtupleÚ_argsÚdictÚ_kwargsÚtypeÚ__name__ÚjoinÚ_namerÚ _danglingÚadd)rÚgroupÚtargetr)ÚargsÚkwargsrÚcountr r r Ú__init__Ps     ÿzBaseProcess.__init__cCs|jrtdƒ‚dS)Nzprocess object is closed)r+Ú ValueErrorrr r r Ú _check_closedcsÿzBaseProcess._check_closedcCs"|jr|j|ji|j¤ŽdSdS)zQ Method to be run in sub-process; can be overridden in sub-class N)r,r.r0rr r r ÚrungsÿzBaseProcess.runcCs>| ¡tƒ| |¡|_|jj|_|`|`|`t   |¡dS)z% Start child process N) r>r rrÚsentinelÚ _sentinelr,r.r0rr6rr r r Ústartns    zBaseProcess.startcCó| ¡|j ¡dS)zT Terminate process; sends SIGTERM signal or uses TerminateProcess() N)r>rÚ terminaterr r r rD€ózBaseProcess.terminatecCrC)zT Terminate process; sends SIGKILL signal or uses TerminateProcess() N)r>rÚkillrr r r rF‡rEzBaseProcess.killcCs.| ¡|j |¡}|durt |¡dSdS)z5 Wait until child process terminates N)r>rÚwaitrr)rÚtimeoutÚresr r r r3Žs  ÿzBaseProcess.joincCsF| ¡|tur dS|jdurdS|j ¡}|durdSt |¡dS)z1 Return whether process is alive TNF)r>rrrrr)rÚ returncoder r r Úis_alive™s   zBaseProcess.is_alivecCsH|jdur|j ¡durtdƒ‚|j ¡d|_|`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=ÚcloserArrr+rr r r rL¬s    zBaseProcess.closecCó|jSr©r4rr r r r)½ózBaseProcess.namecCs ||_dSrrN)rr)r r r r)Ás cCs|j dd¡S)z4 Return whether process is a daemon rF)r$Úgetrr r r rÆszBaseProcess.daemoncCs||jd<dS)z1 Set whether process is a daemon rN©r$)rZdaemonicr r r rÍscCs |jdS)NÚauthkeyrQrr r r rRÕs zBaseProcess.authkeycCst|ƒ|jd<dS)z2 Set authorization key of process rRN)ÚAuthenticationStringr$)rrRr r r rRÙscCs"| ¡|jdur |jS|j ¡S)zM Return exit code of process or `None` if it has yet to stop N)r>rrrr r r Úexitcodeàs  zBaseProcess.exitcodecCs&| ¡|tur t ¡S|jo|jjS)zU Return identifier (PID) of process or `None` if it has yet to start )r>rr&r'rÚpidrr r r ÚidentêszBaseProcess.identcCs*| ¡z|jWStytdƒd‚w)z{ Return a file descriptor (Unix) or handle (Windows) suitable for waiting for process termination. zprocess not startedN)r>rAÚAttributeErrorr=rr r r r@÷s   ÿzBaseProcess.sentinelcCsèd}|tur d}n&|jrd}n |jt ¡krd}n|jdur!d}n|j ¡}|dur-d}nd}t|ƒjd|j g}|jdurG|  d|jj ¡|  d|j¡|  |¡|duret   ||¡}|  d |¡|jrm|  d ¡d d  |¡S) NZstartedÚclosedÚunknownÚinitialZstoppedzname=%rzpid=%sz parent=%sz exitcode=%srz<%s>ú )rr+r(r&r'rrr1r2r4ÚappendrUÚ_exitcode_to_namerPrr3)rrTZstatusÚinfor r r Ú__repr__s0      zBaseProcess.__repr__c CsÌddlm}m}zÍzO|jdur| |j¡t d¡atƒa |  ¡t }|a t |j |j|ƒatjr6t ¡ ¡z| ¡W~n~w| d¡z | ¡d}W| ¡n| ¡wWnYty‰}z%|jdurhd}nt|jtƒrr|j}n tj t|jƒd¡d}WYd}~n?d}~wd}ddl }tj d|j!¡| "¡YWt #¡| d|¡| $¡|SWt #¡| d|¡| $¡|SWt #¡| d|¡| $¡|St #¡| d|¡| $¡w)Né)ÚutilÚcontextz child process calling self.run()rÚ z Process %s: z process exiting with exitcode %d)%ÚrarbZ _start_methodZ_force_start_methodÚ itertoolsr;r"ÚsetrZ _close_stdinrÚ_ParentProcessr*r(rÚ threadingZ_HAVE_THREAD_NATIVE_IDZ main_threadZ_set_native_idÚ _after_forkr^r?Z_exit_functionÚ SystemExitÚcodeÚ isinstanceÚintÚsysÚstderrÚwriterÚ tracebackr)Ú print_excZ _shutdownZ_flush_std_streams)rZparent_sentinelrarbZ old_processrTÚerqr r r Ú _bootstrap"sh    ÿ     € í€üü zBaseProcess._bootstrapcCs"ddlm}|j ¡| ¡dS)Nr`©ra)rdraZ_finalizer_registryÚclearZ_run_after_forkersrur r r riRs   zBaseProcess._after_forkr)r2Ú __module__Ú __qualname__Ú__doc__rr<r>r?rBrDrFr3rKrLÚpropertyr)ÚsetterrrRrTrVrUr@r_rtÚ staticmethodrir r r r rGsJ  ÿ             0rc@seZdZdd„ZdS)rScCs,ddlm}|ƒdurtdƒ‚tt|ƒffS)Nr`)Úget_spawning_popenzJPickling an AuthenticationString object is disallowed for security reasons)rbr}Ú TypeErrorrSÚbytes)rr}r r r Ú __reduce__^s  ÿzAuthenticationString.__reduce__N)r2rwrxr€r r r r rS]s rSc@s6eZdZdd„Zdd„Zedd„ƒZd dd „ZeZdS) rgcCs4d|_||_||_d|_d|_d|_||_i|_dS)Nr F)r#r4Ú_pidr(rr+rAr$)rr)rUr@r r r r<ns z_ParentProcess.__init__cCsddlm}||jgdd S)Nr©rG©rH©Zmultiprocessing.connectionrGrA)rrGr r r rKxs z_ParentProcess.is_alivecCrMr)rrr r r rV|rOz_ParentProcess.identNcCs ddlm}||jg|ddS)z6 Wait until parent process terminates rr‚rƒNr„)rrHrGr r r r3€s z_ParentProcess.joinr) r2rwrxr<rKrzrVr3rUr r r r rgls   rgc@seZdZdd„Zdd„ZdS)Ú _MainProcesscCs8d|_d|_d|_d|_d|_tt d¡ƒddœ|_dS)Nr Z MainProcessFé z/mp)rRZ semprefix) r#r4r(rr+rSr&Úurandomr$rr r r r<s  ÿz_MainProcess.__init__cCsdSrr rr r r rL¡rz_MainProcess.closeN)r2rwrxr<rLr r r r r…s r…r`éZSIGÚ_r)$Ú__all__r&rnÚsignalrerhZ _weakrefsetrÚpathÚabspathÚgetcwdZ ORIGINAL_DIRÚOSErrorrrrr ÚobjectrrrSrgr…rrr;r"rfrr]r Ú__dict__Úitemsr)Zsignumr5r r r r ÚsB   ÿ  ! €