ó
    F\h/  ã                   ó
  • / S Qr SSKrSSKrSSKrSSKrSSKrSSKJr   \R                  R                  \R                  " 5       5      rS rS rS rS r " S S	\5      r " S
 S\5      r " S S\5      r " S S\5      rSq\" 5       q\R2                  " S5      q\" 5       qC0 r\" \R>                  RA                  5       5       H"  u  r!r"\!SS S:X  d  M  S\!;  d  M  S\! 3\\"* '   M$     C!C"\" 5       r#g! \ a    Sr N·f = f))ÚBaseProcessÚcurrent_processÚactive_childrenÚparent_processé    N)ÚWeakSetc                  ó   • [         $ )z8
Return process object representing the current process
)Ú_current_process© ó    Ú./usr/lib/python3.13/multiprocessing/process.pyr   r   %   s
   € ô Ðr   c                  ó4   • [        5         [        [        5      $ )zF
Return list of process objects corresponding to live child processes
)Ú_cleanupÚlistÚ	_childrenr
   r   r   r   r   +   s   € ô „JÜ”	‹?Ðr   c                  ó   • [         $ )z7
Return process object representing the parent process
)Ú_parent_processr
   r   r   r   r   3   s
   € ô Ðr   c                  óª   • [        [        5       H@  n U R                  =n(       d  M  UR                  5       c  M+  [        R	                  U 5        MB     g ©N)r   r   Ú_popenÚpollÚdiscard)ÚpÚchild_popens     r   r   r   =   s;   € ä”)Ž_ˆØŸ8™8Ð#ˆK×#¨×)9Ñ)9Ó);Ó)GÜ×Ñ˜aÖ ò r   c                   ó^  • \ rS rSrSrS rSSSS0 4SS.S jjrS rS	 rS
 r	S r
S rSS jrS rS r\S 5       r\R"                  S 5       r\S 5       r\R"                  S 5       r\S 5       r\R"                  S 5       r\S 5       r\S 5       r\r\S 5       rS rSS jr\S 5       rSrg)r   éG   zt
Process objects represent activity that is run in a separate process

The class is analogous to `threading.Thread`
c                 ó   • [         er   )ÚNotImplementedError©Úselfs    r   Ú_PopenÚBaseProcess._PopenM   s   € Ü!Ð!r   Nr
   )Údaemonc                óB  • Ub   S5       e[        [        5      n[        R                  U4-   U l        [        R                  R                  5       U l        [        R                  " 5       U l        [        R                  U l
        S U l        SU l        X l        [        U5      U l        [!        U5      U l        U=(       d;    [%        U 5      R&                  S-   SR)                  S U R                   5       5      -   U l        Ub  X`l        [.        R1                  U 5        g )Nz#group argument must be None for nowFÚ-Ú:c              3   ó8   #   • U  H  n[        U5      v •  M     g 7fr   )Ústr)Ú.0Úis     r   Ú	<genexpr>Ú'BaseProcess.__init__.<locals>.<genexpr>^   s   é € Ð=ªn¨œc !Ÿf˜fªnùs   ‚)Ú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Útargetr4   ÚargsÚkwargsr"   Úcounts           r   Ú__init__ÚBaseProcess.__init__P   sÛ   € à‰}ÐCÐCÓCˆ}ÜÔ%Ó&ˆÜ)×3Ñ3°u°hÑ>ˆŒÜ'×/Ñ/×4Ñ4Ó6ˆŒÜŸ9š9›;ˆÔÜ,×1Ñ1ˆÔØˆŒØˆŒØŒÜ˜4“[ˆŒ
Ü˜F“|ˆŒØ÷ >œT $›Z×0Ñ0°3Ñ6Ø—X‘XÑ=¨d¯nªnÓ=Ó=ñ>ˆŒ
àÑØ ŒKÜ�‰�dÕr   c                 ó<   • U R                   (       a  [        S5      eg )Nzprocess object is closed)r6   Ú
ValueErrorr   s    r   Ú_check_closedÚBaseProcess._check_closedc   s   € Ø�<�<ÜÐ7Ó8Ð8ð r   c                 ót   • U R                   (       a'  U R                   " U R                  0 U R                  D6  gg)zA
Method to be run in sub-process; can be overridden in sub-class
N)r7   r9   r;   r   s    r   ÚrunÚBaseProcess.rung   s)   € ð �<�<Ø�LŠL˜$Ÿ*™*Ð5¨¯©Ó5ð r   c                 ó¢  • U R                  5         U R                  b   S5       eU R                  [        R                  " 5       :X  d   S5       e[
        R                  R                  S5      (       a   S5       e[        5         U R                  U 5      U l        U R                  R                  U l        U ?U ?U ?[        R!                  U 5        g)z
Start child process
Nzcannot start a process twicez:can only start a process object created by current processr"   z3daemonic processes are not allowed to have children)rK   r   r3   r1   r2   r	   r/   Úgetr   r    ÚsentinelÚ	_sentinelr7   r9   r;   r   rA   r   s    r   ÚstartÚBaseProcess.startn   s¶   € ð 	×ÑÔØ�{‰{Ñ"ÐBÐ$BÓBÐ"Ø×Ñ¤2§9¢9£;Ó.ð 	LØKó	LÐ.ä#×+Ñ+×/Ñ/°×9Ñ9ð 	EØDó	EÐ9äŒ
Ø—k‘k $Ó'ˆŒØŸ™×-Ñ-ˆŒð ˆL˜$˜* d lÜ�‰�dÕr   c                 óX   • U R                  5         U R                  R                  5         g)zD
Terminate process; sends SIGTERM signal or uses TerminateProcess()
N)rK   r   Ú	terminater   s    r   rW   ÚBaseProcess.terminate€   s    € ð 	×ÑÔØ�‰×ÑÕr   c                 óX   • U R                  5         U R                  R                  5         g)zD
Terminate process; sends SIGKILL signal or uses TerminateProcess()
N)rK   r   Úkillr   s    r   rZ   ÚBaseProcess.kill‡   s    € ð 	×ÑÔØ�‰×ÑÕr   c                 ó  • U R                  5         U R                  [        R                  " 5       :X  d   S5       eU R                  c   S5       eU R                  R                  U5      nUb  [        R                  U 5        gg)z%
Wait until child process terminates
zcan only join a child processNzcan only join a started process)rK   r3   r1   r2   r   Úwaitr   r   )r   ÚtimeoutÚress      r   r>   ÚBaseProcess.joinŽ   sr   € ð 	×ÑÔØ×Ñ¤2§9¢9£;Ó.ÐOÐ0OÓOÐ.Ø�{‰{Ñ&ÐIÐ(IÓIÐ&Ø�k‰k×Ñ˜wÓ'ˆØ‰?Ü×Ñ˜dÕ#ð r   c                 ó  • U R                  5         U [        L a  gU R                  [        R                  " 5       :X  d   S5       eU R
                  c  gU R
                  R                  5       nUc  g[        R                  U 5        g)z!
Return whether process is alive
Tzcan only test a child processF)	rK   r	   r3   r1   r2   r   r   r   r   )r   Ú
returncodes     r   Úis_aliveÚBaseProcess.is_alive™   su   € ð 	×ÑÔØÔ#Ò#ØØ×Ñ¤2§9¢9£;Ó.ÐOÐ0OÓOÐ.à�;‰;ÑØà—[‘[×%Ñ%Ó'ˆ
ØÑØä×Ñ˜dÔ#Ør   c                 óè   • U R                   b^  U R                   R                  5       c  [        S5      eU R                   R                  5         SU l         U ?[
        R                  U 5        SU l        g)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)r   r   rJ   ÚcloserS   r   r   r6   r   s    r   rf   ÚBaseProcess.close¬   sg   € ð �;‰;Ñ"Ø�{‰{×ÑÓ!Ñ)Ü ð "Pó Qð Qà�K‰K×ÑÔØˆDŒKØ�Ü×Ñ˜dÔ#Øˆ�r   c                 ó   • U R                   $ r   )r?   r   s    r   r4   ÚBaseProcess.name½   s   € à�z‰zÐr   c                 óH   • [        U[        5      (       d   S5       eXl        g )Nzname must be a string)Ú
isinstancer'   r?   )r   r4   s     r   r4   ri   Á   s    € ä˜$¤×$Ñ$Ð=Ð&=Ó=Ð$Ø�
r   c                 ó:   • U R                   R                  SS5      $ )z$
Return whether process is a daemon
r"   F)r/   rQ   r   s    r   r"   ÚBaseProcess.daemonÆ   s   € ð
 �|‰|×Ñ ¨%Ó0Ð0r   c                 óH   • U R                   b   S5       eXR                  S'   g)z!
Set whether process is a daemon
Nzprocess has already startedr"   )r   r/   )r   Údaemonics     r   r"   rm   Í   s&   € ð
 �{‰{Ñ"ÐAÐ$AÓAÐ"Ø!)�‰�XÒr   c                 ó    • U R                   S   $ )NÚauthkey)r/   r   s    r   rq   ÚBaseProcess.authkeyÕ   s   € à�|‰|˜IÑ&Ð&r   c                 ó4   • [        U5      U R                  S'   g)z"
Set authorization key of process
rq   N)ÚAuthenticationStringr/   )r   rq   s     r   rq   rr   Ù   s   € ô
 #7°wÓ"?ˆ�‰�YÒr   c                 óˆ   • U R                  5         U R                  c  U R                  $ U R                  R                  5       $ )z=
Return exit code of process or `None` if it has yet to stop
)rK   r   r   r   s    r   ÚexitcodeÚBaseProcess.exitcodeà   s7   € ð
 	×ÑÔØ�;‰;ÑØ—;‘;ÐØ�{‰{×ÑÓ!Ð!r   c                 ó°   • U R                  5         U [        L a  [        R                  " 5       $ U R                  =(       a    U R                  R
                  $ )zE
Return identifier (PID) of process or `None` if it has yet to start
)rK   r	   r1   r2   r   Úpidr   s    r   ÚidentÚBaseProcess.identê   s<   € ð
 	×ÑÔØÔ#Ò#Ü—9’9“;Ðà—;‘;×2 4§;¡;§?¡?Ð2r   c                 óp   • U R                  5          U R                  $ ! [         a    [        S5      Sef = f)zc
Return a file descriptor (Unix) or handle (Windows) suitable for
waiting for process termination.
zprocess not startedN)rK   rS   ÚAttributeErrorrJ   r   s    r   rR   ÚBaseProcess.sentinel÷   s<   € ð 	×ÑÔð	>Ø—>‘>Ð!øÜó 	>ÜÐ2Ó3¸Ð=ð	>ús   ’ ž5c                 óÊ  • S nU [         L a  SnOlU R                  (       a  SnOXU R                  [        R                  " 5       :w  a  SnO2U R
                  c  SnO"U R
                  R                  5       nUb  SnOSn[        U 5      R                  SU R                  -  /nU R
                  b(  UR                  SU R
                  R                  -  5        UR                  SU R                  -  5        UR                  U5        Ub)  [        R                  X5      nUR                  S	U-  5        U R                  (       a  UR                  S
5        SSR                  U5      -  $ )NÚstartedÚclosedÚunknownÚinitialÚstoppedzname=%rzpid=%sz	parent=%szexitcode=%sr"   z<%s>Ú )r	   r6   r3   r1   r2   r   r   r<   r=   r?   Úappendry   Ú_exitcode_to_namerQ   r"   r>   )r   rv   ÚstatusÚinfos       r   Ú__repr__ÚBaseProcess.__repr__  s  € ØˆØÔ#Ò#Ø‰FØ�\�\Ø‰FØ×Ñ¤§¢£Ó,Ø‰FØ�[‰[Ñ Ø‰Fà—{‘{×'Ñ'Ó)ˆHØÑ#Ø"‘à"�ä�T“
×#Ñ# Y°·±Ñ%;Ð<ˆØ�;‰;Ñ"Ø�K‰K˜ 4§;¡;§?¡?Ñ2Ô3Ø�‰�K $×"2Ñ"2Ñ2Ô3Ø�‰�FÔØÑÜ(×,Ñ,¨XÓ@ˆHØ�K‰K˜¨Ñ0Ô1Ø�;�;Ø�K‰K˜Ô!Ø˜Ÿ™ ›Ñ&Ð&r   c                 óœ  • SSK JnJn   U R                  b  UR	                  U R                  5        [
        R                  " S5      q[        5       q	UR                  5         [        nU q[        U R                  U R                  U5      q[         R"                  (       a#  [         R$                  " 5       R'                  5          U R)                  5         AUR+                  S5        U R-                  5         Sn[         RD                  " 5         UR+                  SU-  5        URG                  5         U$ ! Af = f! [.         a…  nUR0                  c  Sn S nAN_[3        UR0                  [4        5      (       a  UR0                  n S nAN�[6        R8                  R;                  [=        UR0                  5      S-   5        Sn S nANËS nAf  SnSS Kn[6        R8                  R;                  SU R@                  -  5        URC                  5          GN= f! [         RD                  " 5         UR+                  SW-  5        URG                  5         f = f)Né   )ÚutilÚcontextz child process calling self.run()r   Ú
zProcess %s:
z process exiting with exitcode %d)$Ú rŽ   r�   Ú_start_methodÚ_force_start_methodÚ	itertoolsrF   r-   Úsetr   Ú_close_stdinr	   Ú_ParentProcessr5   r3   r   Ú	threadingÚ_HAVE_THREAD_NATIVE_IDÚmain_threadÚ_set_native_idÚ_after_forkr‰   rN   Ú
SystemExitÚcoderk   ÚintÚsysÚstderrÚwriter'   Ú	tracebackr4   Ú	print_excÚ	_shutdownÚ_flush_std_streams)r   Úparent_sentinelrŽ   r�   Úold_processrv   Úer£   s           r   Ú
_bootstrapÚBaseProcess._bootstrap"  s³  € ß#ð%	&Ø×!Ñ!Ñ-Ø×+Ñ+¨D×,>Ñ,>Ô?Ü(Ÿš¨qÓ1ÐÜ›ˆIØ×ÑÔÜ*ˆKØ#ÐÜ,Ø×!Ñ! 4×#3Ñ#3°_óFˆOä×/×/Ü×%Ò%Ó'×6Ñ6Ô8ð Ø× Ñ Ô"ð  Ø�I‰IÐ8Ô9Ø�H‰HŒJØˆHô ×ÒÔ!Ø�I‰IÐ8¸8ÑCÔDØ×#Ñ#Ô%àˆøñ-  ûô ó 	Ø�v‰v‰~Ø•Ü˜AŸF™F¤C×(Ñ(ØŸ6™6•ä—
‘
× Ñ ¤ Q§V¡V£¨tÑ!3Ô4Ø•ûð	"ØˆHÛÜ�J‰J×Ñ˜_¨t¯y©yÑ8Ô9Ø×Ñ×!ûä×ÒÔ!Ø�I‰IÐ8¸8ÑCÔDØ×#Ñ#Õ%ús[   ŠB9D9 ÃD3 Ã$D9 Ä3D6Ä6D9 Ä9
HÅGÅH Å+GÆH Æ7GÆ>H ÇAHÈ
H È;Ic                  ód   • SSK Jn   U R                  R                  5         U R	                  5         g )Nr�   ©rŽ   )r‘   rŽ   Ú_finalizer_registryÚclearÚ_run_after_forkersr­   s    r   rœ   ÚBaseProcess._after_forkO  s#   € åØ× Ñ ×&Ñ&Ô(Ø×ÑÕ!r   )r9   r6   r/   r.   r;   r?   r5   r3   r   rS   r7   r"   r   )r=   Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__r    rG   rK   rN   rT   rW   rZ   r>   rc   rf   Úpropertyr4   Úsetterr"   rq   rv   rz   ry   rR   rŠ   rª   Ústaticmethodrœ   Ú__static_attributes__r
   r   r   r   r   G   s4  † ñò
"ð "¨$°TÀÈ2ð Øöò&9ò6òò$ òô	$òò&ð" ñó ðð 
‡[�[ñó ðð ñ1ó ð1ð ‡]�]ñ*ó ð*ð ñ'ó ð'ð ‡^�^ñ@ó ð@ð ñ"ó ð"ð ñ3ó ð3ð €Càñ	>ó ð	>ò'ô>+ðZ ñ"ó ó"r   r   c                   ó   • \ rS rSrS rSrg)rt   iZ  c                 óX   • SSK Jn  U" 5       c  [        S5      e[        [	        U 5      44$ )Nr�   )Úget_spawning_popenzJPickling an AuthenticationString object is disallowed for security reasons)r�   r¼   Ú	TypeErrorrt   Úbytes)r   r¼   s     r   Ú
__reduce__ÚAuthenticationString.__reduce__[  s3   € Ý/ÙÓÑ'Üð2óð ô $¤e¨D£k ^Ð3Ð3r   r
   N)r=   r²   r³   r´   r¿   r¹   r
   r   r   rt   rt   Z  s   † õ4r   rt   c                   ó>   • \ rS rSrS rS r\S 5       rSS jr\r	Sr
g)	r—   ii  c                 ón   • SU l         Xl        X l        S U l        S U l        SU l        X0l        0 U l        g )Nr
   F)r.   r?   Ú_pidr3   r   r6   rS   r/   )r   r4   ry   rR   s       r   rG   Ú_ParentProcess.__init__k  s5   € ØˆŒØŒ
ØŒ	ØˆÔØˆŒØˆŒØ!ŒØˆ�r   c                 ó<   • SSK Jn  U" U R                  /SS9(       + $ )Nr   ©r]   ©r^   ©Úmultiprocessing.connectionr]   rS   )r   r]   s     r   rc   Ú_ParentProcess.is_aliveu  s   € Ý3Ù˜Ÿ™Ð(°!Ñ4Ô4Ð4r   c                 ó   • U R                   $ r   )rÃ   r   s    r   rz   Ú_ParentProcess.identy  s   € à�y‰yÐr   Nc                 ó4   • SSK Jn  U" U R                  /US9  g)z&
Wait until parent process terminates
r   rÆ   rÇ   NrÈ   )r   r^   r]   s      r   r>   Ú_ParentProcess.join}  s   € õ 	4Ùˆd�n‰nÐ wÓ/r   )r6   r/   r.   r?   r3   rÃ   r   rS   r   )r=   r²   r³   r´   rG   rc   r¶   rz   r>   ry   r¹   r
   r   r   r—   r—   i  s,   † òò5ð ñó ðô0ð ƒCr   r—   c                   ó    • \ rS rSrS rS rSrg)Ú_MainProcessiŠ  c                 ó˜   • SU l         SU l        S U l        S U l        SU l        [        [        R                  " S5      5      SS.U l        g )Nr
   ÚMainProcessFé    z/mp)rq   Ú	semprefix)	r.   r?   r3   r   r6   rt   r1   Úurandomr/   r   s    r   rG   Ú_MainProcess.__init__Œ  sB   € ØˆŒØ"ˆŒ
ØˆÔØˆŒØˆŒÜ#7¼¿
º
À2»Ó#GØ%*ñ,ˆ�r   c                 ó   • g r   r
   r   s    r   rf   Ú_MainProcess.closež  s   € Ør   )r6   r/   r.   r?   r3   r   N)r=   r²   r³   r´   rG   rf   r¹   r
   r   r   rÐ   rÐ   Š  s   † ò,õ$r   rÐ   r�   é   ÚSIGÚ_r$   )$Ú__all__r1   r    Úsignalr”   r˜   Ú_weakrefsetr   ÚpathÚabspathÚgetcwdÚORIGINAL_DIRÚOSErrorr   r   r   r   Úobjectr   r¾   rt   r—   rÐ   r   r	   rF   r-   r•   r   r‡   r   Ú__dict__Úitemsr4   Úsignumr@   r
   r   r   Ú<module>rè      s"  ðò€ó 
Û 
Û Û Û Ý ðØ—7‘7—?‘? 2§9¢9£;Ó/€Lòòòò!ôL"�&ô L"ôf4˜5ô 4ô�[ô ôB�;ô ð0 €Ù“>Ð Ø—?’? 1Ó%Ð Ù‹E€	Øð Ð á˜Ÿ™×.Ñ.Ó0Ö1�L€Dˆ&ØˆBˆQ€x�…˜3 d�?Ø'(¨¨ ZÐ˜6˜'Ó"ñ 2ð 	ˆ&ñ ‹I�	øðm ó Ø‚Lðús    *C7 Ã7DÄD