
    e6                     d   d dl 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 ddlm	Z	 g dZ
d ZdZdZdZd	Zd
ZdZdadad Zd Zd Zd Zd Zd*dZd Zd Z e       Zd Zd Z ej>                         Z  ejB                         Z"d Z#d Z$i Z% ejB                         Z& G d de'      Z(d*dZ)d Z*da+eee)e	jX                  e	jZ                  fdZ. ej^                  e.        G d de'      Z0 G d  d!ejb                        Z2	  e jf                  d"      Z4d$ Z6d% Z7d& Z8d' Z9d( Z:d) Z;y# e5$ r d#Z4Y w xY w)+    N)_args_from_interpreter_flags   )process)	sub_debugdebuginfosub_warning
get_loggerlog_to_stderrget_temp_dirregister_after_fork
is_exitingFinalizeForkAwareThreadLockForkAwareLocalclose_all_fds_exceptSUBDEBUG
SUBWARNING   
         multiprocessingz+[%(levelname)s/%(processName)s] %(message)sFc                 H    t         rt        j                  t        | g|  y y N)_loggerlogr   msgargss     &lib/python3.12/multiprocessing/util.pyr   r   ,   s    Hc)D)     c                 H    t         rt        j                  t        | g|  y y r   )r   r   DEBUGr   s     r!   r   r   0   s    E3&& r"   c                 H    t         rt        j                  t        | g|  y y r   )r   r   INFOr   s     r!   r   r   4   s    D#%% r"   c                 H    t         rt        j                  t        | g|  y y r   )r   r   r   r   s     r!   r	   r	   8   s    J+d+ r"   c                     ddl } | j                          	 t        s| j                  t              adt        _        t        t        d      r3t        j                  t               t        j                  t               nLt        j                  j                  t        di f       t        j                  j                  t        di f       | j                          t        S # | j                          w xY w)z0
    Returns logger used by multiprocessing
    r   N
unregister )logging_acquireLockr   	getLoggerLOGGER_NAME	propagatehasattratexitr)   _exit_functionregister_exithandlersremoveappend_releaseLock)r+   s    r!   r
   r
   <   s    
 ''4G !G v|,!!.1/$$++^R,DE$$++^R,DE 	N 	s   B5C! !C3c                     ddl }t               }|j                  t              }|j	                         }|j                  |       |j                  |       | r|j                  |        dat        S )zB
    Turn on logging and add a handler which prints to stderr
    r   NT)
r+   r
   	FormatterDEFAULT_LOGGING_FORMATStreamHandlersetFormatter
addHandlersetLevel_log_to_stderrr   )levelr+   logger	formatterhandlers        r!   r   r   W   sb    
 \F!!"89I##%G#
gNNr"   c                  N    t         j                  dk(  ryt        t         d      ryy)NlinuxTgetandroidapilevelF)sysplatformr0   r*   r"   r!   #_platform_supports_abstract_socketsrI   l   s"    
||ws()r"   c                     | syt        | t              r| d   dk(  S t        | t              r| d   dk(  S t        d| d      )NFr    zaddress type of z unrecognized)
isinstancebytesstr	TypeError)addresss    r!   is_abstract_socket_namespacerQ   t   sN    '5!qzQ	GS	!qzT!!
&wk?
@@r"   c                 `     | |       t        j                         }|d |j                  d<   y y )Ntempdir)r   current_process_config)rmtreerS   rT   s      r!   _remove_temp_dirrW      s4    
7O--/O "-1	* #r"   c                  0   t        j                         j                  j                  d      } | fdd l}dd l}|j                  d      } t        d|        t        d t        |j                  | fd       | t        j                         j                  d<   | S )NrS   r   zpymp-)prefixzcreated temp directory %si)r    exitpriority)r   rT   rU   getshutiltempfilemkdtempr   r   rW   rV   )rS   r\   r]   s      r!   r   r      s    %%'//33I>G""'"2('2 	'v}}g.F"	$7>!)))4Nr"   c                      t        t        j                               } | j                          | D ]  \  \  }}}}	  ||        y # t        $ r}t        d|       Y d }~0d }~ww xY w)Nz after forker raised exception %s)list_afterfork_registryitemssort	Exceptionr   )rb   indexidentfuncobjes         r!   _run_after_forkersrj      sf    $**,-E	JJL%* 8!tc	8I8  	83Q77	8s   A	A%A  A%c                 H    | t         t        t              t        |       |f<   y r   )ra   next_afterfork_counterid)rh   rg   s     r!   r   r      s    EH012c7DABr"   c                   N    e Zd ZdZddZdeeej                  fdZ	d Z
d Zd Zy)	r   zA
    Class which supports object finalization using weakrefs
    Nc                 |   |4t        |t              s$t        dj                  |t	        |                  |t        j                  ||       | _        n|t        d      || _	        || _
        |xs i | _        |t        t              f| _        t        j                          | _        | t$        | j                  <   y )Nz3Exitpriority ({0!r}) must be None or int, not {1!s}z+Without object, exitpriority cannot be None)rL   intrO   formattypeweakrefref_weakref
ValueError	_callback_args_kwargsrl   _finalizer_counter_keyosgetpid_pid_finalizer_registry)selfrh   callbackr    kwargsrZ   s         r!   __init__zFinalize.__init__   s    $jc.JELL $|"467 7 ?#KKT2DM!JKK!
|!4(:#;<	IIK	)-DII&r"   c                 r   	 || j                   = | j                   |       k7  r |d       d}nO |d| j                  | j                  | j                          | j                  | j                  i | j                  }dx| _        x| _        x| _        x| _        | _         |S # t        $ r  |d       Y yw xY w)zQ
        Run the callback unless it has already been called or cancelled
        z+finalizer ignored because different processNz/finalizer calling %s with args %s and kwargs %szfinalizer no longer registered)r|   r   rx   ry   rz   rv   KeyError)r   wrr   r   r~   ress         r!   __call__zFinalize.__call__   s    	#DII. yyFH$GHK..$**dllD$dnndjjADLLA7;<DM <DN <TZ < L49J  	867	8s   B" "B65B6c                     	 t         | j                  = dx| _        x| _        x| _        x| _        | _        y# t        $ r Y yw xY w)z3
        Cancel finalization of the object
        N)r   r|   rv   rx   ry   rz   r   r   s    r!   cancelzFinalize.cancel   sU    	<#DII.
 8<<DM <DN <TZ < L49	  		s   7 	AAc                 &    | j                   t        v S )zS
        Return whether this finalizer is still waiting to invoke callback
        )r|   r   r   s    r!   still_activezFinalize.still_active   s     yy///r"   c                    	 | j                         }|d| j                  j                  z  S d| j                  j                  dt        | j                  d| j                        }| j                  r|dt        | j                        z   z  }| j                  r|dt        | j                        z   z  }| j                  d   |dt        | j                  d         z   z  }|d	z   S # t        t        f$ r d }Y w xY w)
Nz<%s object, dead><z object, callback=__name__z, args=z	, kwargs=r   z, exitpriority=>)rv   AttributeErrorrO   	__class__r   getattrrx   ry   rN   rz   r|   )r   rh   xs      r!   __repr__zFinalize.__repr__   s    	--/C ;&)@)@@@  ''
DNNCE ::S_,,A<<s4<<000A99Q<#"S1%666A3w 	* 	C	s   C( (C<;C<)r*   NN)r   
__module____qualname____doc__r   r   r   r}   r~   r   r   r   r   r*   r"   r!   r   r      s3    .&  &9$RYY	0
<0r"   r   c                 |    t         y d }n fd}t        t               D cg c]  } ||      s| }}|j                  d       |D ].  }t         j                  |      }|t	        d|       	  |        0  t         j                          yyc c}w # t
        $ r ddl}|j                          Y mw xY w)z
    Run all finalizers whose exit priority is not None and at least minpriority

    Finalizers with highest priority are called first; finalizers with
    the same priority will be called in reverse order of creation.
    Nc                     | d   d uS Nr   r*   )ps    r!   <lambda>z!_run_finalizers.<locals>.<lambda>  s    qt4' r"   c                 &    | d   d uxr | d   k\  S r   r*   )r   minprioritys    r!   r   z!_run_finalizers.<locals>.<lambda>  s    qt4'?AaDK,? r"   T)reversez
calling %sr   )	r   r`   rc   r[   r   rd   	traceback	print_excclear)r   fkeykeys	finalizerr   s   `     r!   _run_finalizersr     s     " 	'?   34?C#C?D?IIdI 	&'++C0	 lI.&	& !!#  @  & ##%&s   BB5BB;:B;c                  "    t         xs t         du S )z6
    Returns true if the process is shutting down
    N)_exitingr*   r"   r!   r   r   8  s     'x4''r"   c                 \   t         sda  | d        |d        |d        |       u |       D ]<  }|j                  s | d|j                         |j                  j	                          >  |       D ]%  } | d|j                         |j                          '  |d        |        y y )NTzprocess shutting downz2running all "atexit" finalizers with priority >= 0r   z!calling terminate() for daemon %szcalling join() for process %sz)running the remaining "atexit" finalizers)r   daemonname_popen	terminatejoin)r   r   r   active_childrenrT   r   s         r!   r2   r2   @  s     $%BC( %& )88<affEHH&&()
 %& 4aff= 	9:? r"   c                   $    e Zd Zd Zd Zd Zd Zy)r   c                     t        j                         | _        | j                  j                  | _        | j                  j                  | _        t        | t        j                         y r   )	threadingLock_lockacquirereleaser   r   _at_fork_reinitr   s    r!   r   zForkAwareThreadLock.__init__q  sC    ^^%
zz))zz))D"5"E"EFr"   c                 8    | j                   j                          y r   )r   r   r   s    r!   r   z#ForkAwareThreadLock._at_fork_reinitw  s    

""$r"   c                 6    | j                   j                         S r   )r   	__enter__r   s    r!   r   zForkAwareThreadLock.__enter__z  s    zz##%%r"   c                 4     | j                   j                  | S r   )r   __exit__)r   r    s     r!   r   zForkAwareThreadLock.__exit__}  s    "tzz""D))r"   N)r   r   r   r   r   r   r   r*   r"   r!   r   r   p  s    G%&*r"   r   c                       e Zd Zd Zd Zy)r   c                     t        | d        y )Nc                 6    | j                   j                         S r   )__dict__r   )rh   s    r!   r   z)ForkAwareLocal.__init__.<locals>.<lambda>  s    s||/A/A/C r"   )r   r   s    r!   r   zForkAwareLocal.__init__  s    D"CDr"   c                     t        |       dfS )Nr*   )rs   r   s    r!   
__reduce__zForkAwareLocal.__reduce__  s    Dz2~r"   N)r   r   r   r   r   r*   r"   r!   r   r     s    Er"   r   SC_OPEN_MAX   c                     t        |       dt        gz   } | j                          | d   t        k(  sJ d       t        t	        |       dz
        D ]$  }t        j                  | |   dz   | |dz             & y )Nzfd too larger   )r`   MAXFDrc   rangelenr}   
closerange)fdsis     r!   r   r     sk    
s)r5k
!CHHJr7e+^+3s8a<  *
c!fQhAaC)*r"   c                     t         j                  y 	 t         j                  j                          	 t        j                  t
        j                  t
        j                        } 	 t        | dd      t         _        y # t        t        f$ r Y ]w xY w#  t        j                  |         xY w# t        t        f$ r Y y w xY w)Nzutf-8F)encodingclosefd)	rG   stdincloseOSErrorrw   r}   opendevnullO_RDONLY)fds    r!   _close_stdinr     s    
yy		WWRZZ-	R'5ACI Z  	HHRLZ  s4   A= 2B- %B =BBB**B- -B?>B?c                      	 t         j                  j                          	 t         j
                  j                          y # t        t        f$ r Y 1w xY w# t        t        f$ r Y y w xY wr   )rG   stdoutflushr   rw   stderrr*   r"   r!   _flush_std_streamsr     s]    



 J'  J' s"   A  A  AAA'&A'c                    dd l }dd l}t        t        t	        t
        |                  }t        j                         \  }}	 |j                  || gd|d d dddddd||dddd d d dd |j                        t        j                  |       t        j                  |       S # t        j                  |       t        j                  |       w xY w)Nr   Tr   F)_posixsubprocess
subprocesstuplesortedmaprq   r}   pipe	fork_exec
_USE_VFORKr   )pathr    passfdsr   r   errpipe_readerrpipe_writes          r!   spawnv_passfdsr     s    F3sG,-.G"$'')L- ))4&$tBBL-5"dD$D!!	# 	
 	
s   1B ,Cc                  <    | D ]  }t        j                  |        y)z/Close each file descriptor given as an argumentN)r}   r   )r   r   s     r!   	close_fdsr     s     
r"   c                     ddl m}  t        j                          ddlm} |j                  j                          ddlm} |j                  j                          t                | j                          | j                          y)zKCleanup multiprocessing resources when multiprocessing tests
    completed.r   )support)
forkserver)resource_trackerN)testr   r   _cleanupr   r   _forkserver_stopr   _resource_trackerr   
gc_collectreap_children)r   r   r   s      r!   _cleanup_testsr     sc       +  " 1&&,,. r"   r   )<r}   	itertoolsrG   rt   r1   r   r   r    r   __all__NOTSETr   r$   r&   r   r.   r:   r   r?   r   r   r   r	   r
   r   rI   rQ   abstract_sockets_supportedrW   r   WeakValueDictionaryra   countrm   rj   r   r   r{   objectr   r   r   r   r   rT   r2   r3   r   localr   sysconfr   rd   r   r   r   r   r   r   r*   r"   r!   <module>r     s   
  
    3  

	
F 
*'&,6*A AB 2$ 2g113 $Y__& 8I  $Y__& Sv Sl&$X( E?#*#:#:#*#:#:(T  *& *"Y__ BJJ}%E*.  Q  Es    D% %D/.D/