
    .hh/                     
   / 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 Nf = f))BaseProcesscurrent_processactive_childrenparent_process    N)WeakSetc                      [         $ )z8
Return process object representing the current process
)_current_process     @/opt/python-3.13.8/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;    )_88#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                .   [        [        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 )NF-: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!ffns   )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     %&)33uh>'//44699;,114[
F| >T$Z0036XX=dnn==>
 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)     <<LL$**55 r   c                     U R                  5         [        5         U R                  U 5      U l        U R                  R                  U l        U ?U ?U ?[        R                  U 5        g)z
Start child process
N)rK   r   r    r   sentinel	_sentinelr7   r9   r;   r   rA   r   s    r   startBaseProcess.startn   sS     	 	
kk$'-- L$*dl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   rV   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   rY   BaseProcess.kill   s      	r   c                     U R                  5         U R                  R                  U5      nUb  [        R	                  U 5        gg)z%
Wait until child process terminates
N)rK   r   waitr   r   )r   timeoutress      r   r>   BaseProcess.join   s>     	 kkw'?d# r   c                     U R                  5         U [        L a  gU R                  c  gU R                  R                  5       nUc  g[        R                  U 5        g)z!
Return whether process is alive
TF)rK   r	   r   r   r   r   )r   
returncodes     r   is_aliveBaseProcess.is_alive   sW     	## ;;[[%%'
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   closerR   r   r   r6   r   s    r   re   BaseProcess.close   sg     ;;"{{!)  "P Q QKKDKd#r   c                     U R                   $ r   r?   r   s    r   r4   BaseProcess.name   s    zzr   c                     Xl         g r   rh   )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/   getr   s    r   r"   BaseProcess.daemon   s    
 ||%00r   c                      XR                   S'   g)z!
Set whether process is a daemon
r"   Nr/   )r   daemonics     r   r"   rm      s     "*Xr   c                      U R                   S   $ )Nauthkeyro   r   s    r   rr   BaseProcess.authkey   s    ||I&&r   c                 4    [        U5      U R                  S'   g)z"
Set authorization key of process
rr   N)AuthenticationStringr/   )r   rr   s     r   rr   rs      s    
 #7w"?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<    
 	##99;;;24;;??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   rR   AttributeErrorrJ   r   s    r   rQ   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?   appendrz   _exitcode_to_namerl   r"   r>   )r   rw   statusinfos       r   __repr__BaseProcess.__repr__  s   ##F\\F,F[[ F{{'')H#""T
##Y%;<;;"KK4;;??23K$"2"223F(,,X@HKK01;;KK!&&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NS 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code
isinstanceintsysstderrwriter'   	tracebackr4   	print_exc	_shutdown_flush_std_streams)r   parent_sentinelr   r   old_processrw   er   s           r   
_bootstrapBaseProcess._bootstrap"  s   #%	&!!-++D,>,>?(q1I*K#,!!4#3#3_FO//%%'668   "  II89HHJH !II88CD##%-    	vv~AFFC((66

  QVVt!34	"HJJ_tyy89!!II88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   rR   r7   r"   r   )r=   
__module____qualname____firstlineno____doc__r    rG   rK   rN   rS   rV   rY   r>   rb   re   propertyr4   setterr"   rr   rw   r{   rz   rQ   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)ru   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   	TypeErrorru   bytes)r   r   s     r   
__reduce__AuthenticationString.__reduce__[  s3    /'2  $eDk^33r   r
   N)r=   r   r   r   r   r   r
   r   r   ru   ru   Z  s    4r   ru   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   rR   r/   )r   r4   rz   rQ   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\   rR   )r   r\   s     r   rb   _ParentProcess.is_aliveu  s    3(!444r   c                     U R                   $ r   )r   r   s    r   r{   _ParentProcess.identy  s    yy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dnnw/r   )r6   r/   r.   r?   r3   r   r   rR   r   )r=   r   r   r   rG   rb   r   r{   r>   rz   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)rr   	semprefix)	r.   r?   r3   r   r6   ru   r1   urandomr/   r   s    r   rG   _MainProcess.__init__  sB    "
#7

2#G%*,r   c                     g r   r
   r   s    r   re   _MainProcess.close  s    r   )r6   r/   r.   r?   r3   r   N)r=   r   r   r   rG   re   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   ru   r   r   r   r	   rF   r-   r   r   r   r   __dict__itemsr4   signumr@   r
   r   r   <module>r      s"   
 
    77??299;/L!L"& L"f45 4[ B; 0 > ??1% E	  ..01LD&BQx3d?'(Z6'" 2 	& I	m  Ls   *C7 7DD