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°|dusJdƒ‚ttƒ}tj|f|_tj ¡|_t ¡|_tj |_ d|_ d|_ ||_ t|ƒ|_t|ƒ|_|pHt|ƒjdd dd„|jDƒ¡|_|durQ||_t |¡dS)Nz#group argument must be None for nowFú-ú: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.runcCsz| ¡|jdus Jdƒ‚|jt ¡ksJdƒ‚tj d¡r"Jdƒ‚tƒ|  |¡|_|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)r>rr(r&r'rr$Úgetr rÚ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 rE€ózBaseProcess.terminatecCrD)zT Terminate process; sends SIGKILL signal or uses TerminateProcess() N)r>rÚkillrr r r rG‡rFzBaseProcess.killcCsV| ¡|jt ¡ksJdƒ‚|jdusJdƒ‚|j |¡}|dur)t |¡dSdS)z5 Wait until child process terminates zcan only join a child processNzcan only join a started process)r>r(r&r'rÚwaitrr)rÚtimeoutÚresr r r r3Žs ÿzBaseProcess.joincCs\| ¡|tur dS|jt ¡ksJdƒ‚|jdurdS|j ¡}|dur'dSt |¡dS)z1 Return whether process is alive Tzcan only test a child processNF) r>rr(r&r'rrrr)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=ÚcloserBrrr+rr r r rM¬s    zBaseProcess.closecCó|jSr)r4rr r r r)½ózBaseProcess.namecCst|tƒs Jdƒ‚||_dS)Nzname must be a string)Ú isinstancerr4)rr)r r r r)Ás cCs|j dd¡S)z4 Return whether process is a daemon rF)r$r@rr r r rÆszBaseProcess.daemoncCs |jdus Jdƒ‚||jd<dS)z1 Set whether process is a daemon Nzprocess has already startedr)rr$)rZdaemonicr r r rÍscCs |jdS)NÚauthkey)r$rr r r rQÕs zBaseProcess.authkeycCst|ƒ|jd<dS)z2 Set authorization key of process rQN)ÚAuthenticationStringr$)rrQr r r rQÙ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>rBÚAttributeErrorr=rr r r rA÷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ÚappendrTÚ_exitcode_to_namer@rr3)rrSZstatusÚ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)%Úr`raZ _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ÚcoderPÚintÚsysÚstderrÚwriterÚ tracebackr)Ú print_excZ _shutdownZ_flush_std_streams)rZparent_sentinelr`raZ old_processrSÚeror r r Ú _bootstrap"sh    ÿ     € í€üü zBaseProcess._bootstrapcCs"ddlm}|j ¡| ¡dS)Nr_©r`)rcr`Z_finalizer_registryÚclearZ_run_after_forkersrsr r r rhRs   zBaseProcess._after_forkr)r2Ú __module__Ú __qualname__Ú__doc__rr<r>r?rCrErGr3rLrMÚpropertyr)ÚsetterrrQrSrUrTrAr^rrÚ staticmethodrhr r r r rGsJ  ÿ             0rc@seZdZdd„ZdS)rRcCs,ddlm}|ƒdurtdƒ‚tt|ƒffS)Nr_)Úget_spawning_popenzJPickling an AuthenticationString object is disallowed for security reasons)rar{Ú TypeErrorrRÚbytes)rr{r r r Ú __reduce__^s  ÿzAuthenticationString.__reduce__N)r2rurvr~r r r r rR]s rRc@s6eZdZdd„Zdd„Zedd„ƒZd dd „ZeZdS) rfcCs4d|_||_||_d|_d|_d|_||_i|_dS)Nr F)r#r4Ú_pidr(rr+rBr$)rr)rTrAr r r r<ns z_ParentProcess.__init__cCsddlm}||jgdd S)Nr©rH©rI©Zmultiprocessing.connectionrHrB)rrHr r r rLxs z_ParentProcess.is_alivecCrNr)rrr r r rU|rOz_ParentProcess.identNcCs ddlm}||jg|ddS)z6 Wait until parent process terminates rr€rNr‚)rrIrHr r r r3€s z_ParentProcess.joinr) r2rurvr<rLrxrUr3rTr r r r rfls   rfc@seZdZdd„Zdd„ZdS)Ú _MainProcesscCs8d|_d|_d|_d|_d|_tt d¡ƒddœ|_dS)Nr Z MainProcessFé z/mp)rQZ semprefix) r#r4r(rr+rRr&Úurandomr$rr r r r<s  ÿz_MainProcess.__init__cCsdSrr rr r r rM¡rz_MainProcess.closeN)r2rurvr<rMr r r r rƒs rƒr_éZSIGÚ_r)$Ú__all__r&rlÚsignalrdrgZ _weakrefsetrÚpathÚabspathÚgetcwdZ ORIGINAL_DIRÚOSErrorrrrr Úobjectrr}rRrfrƒrrr;r"rerr\r Ú__dict__Úitemsr)Zsignumr5r r r r ÚsB   ÿ  ! €