
    Rh7                     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                 N    t         rt        j                  t        | g|ddi y y N
stacklevel   )_loggerlogr   msgargss     +/usr/lib/python3.12/multiprocessing/util.pyr   r   ,   s"    Hc7D7Q7     c                 N    t         rt        j                  t        | g|ddi y y r   )r   r   DEBUGr    s     r#   r   r   0   s"    E344!4 r$   c                 N    t         rt        j                  t        | g|ddi y y r   )r   r   INFOr    s     r#   r   r   4   s"    D#333 r$   c                 N    t         rt        j                  t        | g|ddi y y r   )r   r   r   r    s     r#   r	   r	   8   s"    J9d9q9 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platformr2   r,   r$   r#   #_platform_supports_abstract_socketsrK   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_namespacerS   t   sN    '5!qzQ	GS	!qzT!!
&wk?
@@r$   c                 j    d } | ||       t        j                         }|d |j                  d<   y y )Nc                 ,    t        |d   t              s y Nr   )
issubclassFileNotFoundError)funcpatherr_infos      r#   onerrorz!_remove_temp_dir.<locals>.onerror   s    (1+'89 :r$   )r\   tempdir)r   current_process_config)rmtreer]   r\   r^   s       r#   _remove_temp_dirra      s>     7G$--/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 )Nr]   r   zpymp-)prefixzcreated temp directory %si)r"   exitpriority)r   r^   r_   getshutiltempfilemkdtempr   r   ra   r`   )r]   rf   rg   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   )rl   indexidentrY   objes         r#   _run_after_forkersrs      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 N)rk   next_afterfork_counterid)rq   rY   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)rN   intrQ   formattypeweakrefref_weakref
ValueError	_callback_args_kwargsrv   _finalizer_counter_keyosgetpid_pid_finalizer_registry)selfrq   callbackr"   kwargsrd   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   r   r   r   r   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   r   r   r   r   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=>)r   AttributeErrorrQ   	__class__r   getattrr   r   rP   r   r   )r   rq   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 rV   r,   )ps    r#   <lambda>z!_run_finalizers.<locals>.<lambda>  s    qt4' r$   c                 &    | d   d uxr | d   k\  S rV   r,   )r   minprioritys    r#   r   z!_run_finalizers.<locals>.<lambda>  s    qt4'?AaDK,? r$   T)reversez
calling %sr   )	r   rj   rm   re   r   rn   	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   ;  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_childrenr^   r   s         r#   r4   r4   C  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 ru   )	threadingLock_lockacquirereleaser   r   _at_fork_reinitr   s    r#   r   zForkAwareThreadLock.__init__t  sC    ^^%
zz))zz))D"5"E"EFr$   c                 8    | j                   j                          y ru   )r   r   r   s    r#   r   z#ForkAwareThreadLock._at_fork_reinitz  s    

""$r$   c                 6    | j                   j                         S ru   )r   	__enter__r   s    r#   r   zForkAwareThreadLock.__enter__}  s    zz##%%r$   c                 4     | j                   j                  | S ru   )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   s  s    G%&*r$   r   c                       e Zd Zd Zd Zy)r   c                     t        | d        y )Nc                 6    | j                   j                         S ru   )__dict__r   )rq   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,   )r}   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   )rj   MAXFDrm   rangelenr   
closerange)fdsis     r#   r   r     sn    
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)	rI   stdincloseOSErrorr   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ru   )rI   stdoutflushr   r   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mapr{   r   pipe	fork_exec
_USE_VFORKr   )rZ   r"   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$   ru   )<r   	itertoolsrI   r~   r3   r   r   r    r   __all__NOTSETr   r&   r(   r   r0   r<   r   rA   r   r   r   r	   r
   r   rK   rS   abstract_sockets_supportedra   r   WeakValueDictionaryrk   countrw   rs   r   r   r   objectr   r   r   r   r   r^   r4   r5   r   localr   sysconfr   rn   r   r   r   r   r   r  r,   r$   r#   <module>r     s   
  
    3  

	
F 
854: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/