
    dk/                     &   g d Z ddlZddlZddlZddlZddlZddlmZ 	 ej        	                     ej
                              Zn# e$ r dZY nw xY wd Zd Zd Zd Z G d d	e          Z G d
 de          Z G d de          Z G d de          Zda e            a ej        d          a e            a[i Z eej                                                   D ] \  Z!Z"e!dd         dk    rde!vr	de! ee" <   ![![" e            Z#dS ))BaseProcesscurrent_processactive_childrenparent_process    N)WeakSetc                      t           S )z@
    Return process object representing the current process
    )_current_process     )  /croot/python-split_1694437901252/_h_env_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_plac/lib/python3.11/multiprocessing/process.pyr   r   %   s
     r   c                  F    t                       t          t                    S )zN
    Return list of process objects corresponding to live child processes
    )_cleanuplist	_childrenr
   r   r   r   r   +   s     JJJ	??r   c                      t           S )z?
    Return process object representing the parent process
    )_parent_processr
   r   r   r   r   3   s
     r   c                      t          t                    D ]9} | j        x}r.|                                t                              |            :d S N)r   r   _popenpolldiscard)pchild_popens     r   r   r   =   sV    )__ ! !8#K 	!)9)9););)Ga   ! !r   c                   n   e Zd ZdZd Zddddi fdddZd Zd Zd	 Zd
 Z	d Z
ddZd Zd Zed             Zej        d             Zed             Zej        d             Zed             Zej        d             Zed             Zed             ZeZed             Zd ZddZed             ZdS )r   z
    Process objects represent activity that is run in a separate process

    The class is analogous to `threading.Thread`
    c                     t           r   )NotImplementedErrorselfs    r   _PopenzBaseProcess._PopenM   s    !!r   Nr
   )daemonc                N   |
J d            t          t                    }t          j        |fz   | _        t          j                                        | _        t          j                    | _        t          j	        | _
        d | _        d| _        || _        t          |          | _        t!          |          | _        |p;t%          |           j        dz   d                    d | j        D                       z   | _        ||| _        t.                              |            d S )Nz#group argument must be None for nowF-:c              3   4   K   | ]}t          |          V  d S r   )str).0is     r   	<genexpr>z'BaseProcess.__init__.<locals>.<genexpr>^   s(      ==c!ff======r   )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targetr1   argskwargsr    counts           r   __init__zBaseProcess.__init__P   s    }}C}}}%&&)3uh>'/44669;;,14[[
F|| >T$ZZ036XX==dn=====>
 DKdr   c                 2    | j         rt          d          d S )Nzprocess object is closed)r3   
ValueErrorr   s    r   _check_closedzBaseProcess._check_closedc   s%    < 	97888	9 	9r   c                 F    | j         r | j         | j        i | j         dS dS )zQ
        Method to be run in sub-process; can be overridden in sub-class
        N)r4   r6   r8   r   s    r   runzBaseProcess.rung   s9     < 	6DL$*555555	6 	6r   c                    |                                   | j        
J d            | j        t          j                    k    s
J d            t
          j                            d          r
J d            t                       | 	                    |           | _        | j        j
        | _        | `| `| `t                              |            dS )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)rG   r   r0   r.   r/   r	   r,   getr   r   sentinel	_sentinelr4   r6   r8   r   r>   r   s    r   startzBaseProcess.startn   s     	{""$B"""29;;...K /..#+//99 	E 	ED	E 	E 	E


kk$''- L$*dldr   c                 `    |                                   | j                                         dS )zT
        Terminate process; sends SIGTERM signal or uses TerminateProcess()
        N)rG   r   	terminater   s    r   rP   zBaseProcess.terminate   s0     	r   c                 `    |                                   | j                                         dS )zT
        Terminate process; sends SIGKILL signal or uses TerminateProcess()
        N)rG   r   killr   s    r   rR   zBaseProcess.kill   s0     	r   c                    |                                   | j        t          j                    k    s
J d            | j        
J d            | j                            |          }|t                              |            dS dS )z5
        Wait until child process terminates
        zcan only join a child processNzcan only join a started process)rG   r0   r.   r/   r   waitr   r   )r   timeoutress      r   r;   zBaseProcess.join   s     	29;;...0O...{&&(I&&&kw''?d##### ?r   c                    |                                   | t          u rdS | j        t          j                    k    s
J d            | j        dS | j                                        }|dS t                              |            dS )z1
        Return whether process is alive
        Tzcan only test a child processNF)	rG   r	   r0   r.   r/   r   r   r   r   )r   
returncodes     r   is_alivezBaseProcess.is_alive   s     	###429;;...0O...;5[%%''
4d###5r   c                     | j         d| j                                         t          d          | j                                          d| _         | `t
                              |            d| _        dS )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   rF   closerM   r   r   r3   r   s    r   r[   zBaseProcess.close   sz     ;"{!!)  "P Q Q QKDKd###r   c                     | j         S r   )r<   r   s    r   r1   zBaseProcess.name   s
    zr   c                 R    t          |t                    s
J d            || _        d S )Nzname must be a string)
isinstancer%   r<   )r   r1   s     r   r1   zBaseProcess.name   s,    $$$==&====


r   c                 8    | j                             dd          S )z4
        Return whether process is a daemon
        r    F)r,   rK   r   s    r   r    zBaseProcess.daemon   s    
 |%000r   c                 <    | j         
J d            || j        d<   dS )z1
        Set whether process is a daemon
        Nzprocess has already startedr    )r   r,   )r   daemonics     r   r    zBaseProcess.daemon   s-    
 {""$A"""!)Xr   c                     | j         d         S )Nauthkey)r,   r   s    r   rc   zBaseProcess.authkey   s    |I&&r   c                 4    t          |          | j        d<   dS )z2
        Set authorization key of process
        rc   N)AuthenticationStringr,   )r   rc   s     r   rc   zBaseProcess.authkey   s    
 #7w"?"?Yr   c                 x    |                                   | j        | j        S | j                                        S )zM
        Return exit code of process or `None` if it has yet to stop
        )rG   r   r   r   s    r   exitcodezBaseProcess.exitcode   s:    
 	;;{!!!r   c                     |                                   | t          u rt          j                    S | j        o| j        j        S )zU
        Return identifier (PID) of process or `None` if it has yet to start
        )rG   r	   r.   r/   r   pidr   s    r   identzBaseProcess.ident   s?    
 	###9;;;24;?2r   c                 v    |                                   	 | j        S # t          $ r t          d          dw xY w)z{
        Return a file descriptor (Unix) or handle (Windows) suitable for
        waiting for process termination.
        zprocess not startedN)rG   rM   AttributeErrorrF   r   s    r   rL   zBaseProcess.sentinel   sO     		>>! 	> 	> 	>233=	>s    8c                    d }| t           u rd}nS| j        rd}nI| j        t          j                    k    rd}n*| j        d}n | j                                        }|d}nd}t          |           j        d| j	        z  g}| j        "|
                    d| j        j        z             |
                    d| j        z             |
                    |           |3t                              ||          }|
                    d	|z             | j        r|
                    d
           dd                    |          z  S )Nstartedclosedunknowninitialstoppedzname=%rzpid=%sz	parent=%szexitcode=%sr    z<%s> )r	   r3   r0   r.   r/   r   r   r9   r:   r<   appendri   _exitcode_to_namerK   r    r;   )r   rg   statusinfos       r   __repr__zBaseProcess.__repr__  sF   ###FF\ 	#FF,,FF[ FF{''))H#""T

#Y%;<;"KK4;?2333K$"22333F(,,Xx@@HKK0111; 	"KK!!!&&r   c                    ddl m}m} 	 | j        |                    | j                   t          j        d          at                      a	|
                                 t          }| at          | j        | j        |          at           j        r%t!          j                                                     	 |                                  ~n# ~w xY w|                    d           	 |                                  d}|                                 n# |                                 w xY wn# t0          $ rl}|j        d}nXt5          |j        t6                    r|j        }n6t8          j                            t?          |j                  dz              d}Y d }~nKd }~w d}dd l }t8          j                            d| j!        z             |"                                 Y nxY wt!          j#                     |                    d|z             |$                                 nD# t!          j#                     |                    d|z             |$                                 w xY w|S )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	itertoolsrC   r*   setr   _close_stdinr	   _ParentProcessr2   r0   r   	threading_HAVE_THREAD_NATIVE_IDmain_thread_set_native_id_after_forkrw   rI   _exit_function
SystemExitcoder^   intsysstderrwriter%   	tracebackr1   	print_exc	_shutdown_flush_std_streams)r   parent_sentinelr{   r|   old_processrg   er   s           r   
_bootstrapzBaseProcess._bootstrap"  s|   ########(	&!-++D,>???(q11I*K#,!4#3_F FO/ 9%''66888   """  KKII8999&


##%%%%##%%%%% 	 	 	v~AFC(( 6
  QVt!3444	"HJ_ty8999!!!!!!!!II88CDDD##%%%% !!!II88CDDD##%%%%sc   B,D. 7C D. CD. )D ?D. D**D. -H* .
G'8A"FH* AG'%H* *AI+c                  l    ddl m}  | j                                         |                                  d S )Nrz   r{   )r~   r{   _finalizer_registryclear_run_after_forkersr   s    r   r   zBaseProcess._after_forkR  sA     &&(((!!!!!r   r   )r:   
__module____qualname____doc__r   rD   rG   rI   rN   rP   rR   r;   rY   r[   propertyr1   setterr    rc   rg   rj   ri   rL   rx   r   staticmethodr   r
   r   r   r   r   G   s        
" " " "$T2     &9 9 96 6 6  $       	$ 	$ 	$ 	$  &  "   X 
[  [ 1 1 X1 ]* * ]* ' ' X' ^@ @ ^@ " " X" 3 3 X3 C	> 	> X	>' ' '>. . . .` " " \" " "r   r   c                       e Zd Zd ZdS )re   c                 n    ddl m}  |            t          d          t          t	          |           ffS )Nrz   )get_spawning_popenzJPickling an AuthenticationString object is disallowed for security reasons)r|   r   	TypeErrorre   bytes)r   r   s     r   
__reduce__zAuthenticationString.__reduce__^  sO    //////'2   $eDkk^33r   N)r:   r   r   r   r
   r   r   re   re   ]  s#        4 4 4 4 4r   re   c                   <    e Zd Zd Zd Zed             ZddZeZdS )r   c                 v    d| _         || _        || _        d | _        d | _        d| _        || _        i | _        d S )Nr
   F)r+   r<   _pidr0   r   r3   rM   r,   )r   r1   ri   rL   s       r   rD   z_ParentProcess.__init__n  s?    
	!r   c                 6    ddl m}  || j        gd           S )Nr   rT   rU   multiprocessing.connectionrT   rM   )r   rT   s     r   rY   z_ParentProcess.is_alivex  s1    3333334(!44444r   c                     | j         S r   )r   r   s    r   rj   z_ParentProcess.ident|  s
    yr   Nc                 8    ddl m}  || j        g|           dS )z6
        Wait until parent process terminates
        r   r   r   Nr   )r   rU   rT   s      r   r;   z_ParentProcess.join  s6     	433333dnw//////r   r   )	r:   r   r   rD   rY   r   rj   r;   ri   r
   r   r   r   r   l  sb          5 5 5   X0 0 0 0 CCCr   r   c                       e Zd Zd Zd ZdS )_MainProcessc                     d| _         d| _        d | _        d | _        d| _        t          t          j        d                    dd| _        d S )Nr
   MainProcessF    z/mp)rc   	semprefix)	r+   r<   r0   r   r3   re   r.   urandomr,   r   s    r   rD   z_MainProcess.__init__  sN    "
#7
2#G#G%*, ,r   c                     d S r   r
   r   s    r   r[   z_MainProcess.close  s    r   N)r:   r   r   rD   r[   r
   r   r   r   r     s2        , , ,$    r   r   rz      SIG_r"   )$__all__r.   r   signalr   r   _weakrefsetr   pathabspathgetcwdORIGINAL_DIROSErrorr   r   r   r   objectr   r   re   r   r   r   r	   rC   r*   r   r   ru   r   __dict__itemsr1   signumr=   r
   r   r   <module>r      s:     
			 



               7??929;;//LL   LLL      ! ! !O" O" O" O" O"& O" O" O"l4 4 4 4 45 4 4 4    [   B    ;   0 <>> "9?1%% CEE	  D..0011 0 0LD&BQBx3d??%/ZZ6'"& GII			s   'A AA