
    =Og7                     N   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j!                    Z"d Z#d Z$i Z% ej!                    Z& G d de'          Z(d*dZ)d Z*da+eee)e	j,        e	j-        fdZ. ej/        e.            G d de'          Z0 G d  d!ej1                  Z2	  e j3        d"          Z4n# e5$ r d#Z4Y nw xY wd$ Z6d% Z7d& Z8d' Z9d( Z:d) Z;dS )+    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|R ddi d S d S N
stacklevel   )_loggerlogr   msgargss     -/usr/lib64/python3.11/multiprocessing/util.pyr   r   ,   s<     8Hc7D777Q777778 8    c                 N    t           rt          j        t          | g|R ddi d S d S r   )r   r   DEBUGr    s     r#   r   r   0   s<     5E34444!444445 5r$   c                 N    t           rt          j        t          | g|R ddi d S d S r   )r   r   INFOr    s     r#   r   r   4   s<     4D#3333333334 4r$   c                 N    t           rt          j        t          | g|R ddi d S d S r   )r   r   r   r    s     r#   r	   r	   8   s<     :J9d999q99999: :r$   c                  $   ddl } |                                  	 t          s|                     t                    adt          _        t          t          d          r3t          j        t                     t          j
        t                     nNt          j                            t          di f           t          j                            t          di f           |                                  n# |                                  w xY wt          S )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    
 NNN 	F''44G !G v|,, F!.111////$++^R,DEEE$++^R,DEEE 	Ns   CC2 2Dc                    ddl }t                      }|                    t                    }|                                }|                    |           |                    |           | r|                    |            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   s    
 NNN\\F!!"899I##%%G###
g NNr$   c                  X    t           j        dk    rdS t          t           d          rdS dS )NlinuxTgetandroidapilevelF)sysplatformr2   r,   r$   r#   #_platform_supports_abstract_socketsrK   l   s1    
|wts()) t5r$   c                     | sdS 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   sj     u'5!! "qzQ	GS	!	! "qzT!!
?w???
@
@@r$   c                 h    d } | ||           t          j                    }|d |j        d<   d S d S )Nc                 >    t          |d         t                    s d S Nr   )
issubclassFileNotFoundError)funcpatherr_infos      r#   onerrorz!_remove_temp_dir.<locals>.onerror   s&    (1+'899 		 	r$   )r\   tempdir)r   current_process_config)rmtreer]   r\   r^   s       r#   _remove_temp_dirra      sY       F7G$$$$-//O "-1	*** #"r$   c                  0   t          j                    j                            d          } | hdd l}dd l}|                    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('222 	'v}g.F"	$ 	$ 	$ 	$7>!!))4Nr$   c                      t          t                                                    } |                                  | D ]<\  \  }}}}	  ||           # t          $ r}t          d|           Y d }~5d }~ww xY wd S )Nz after forker raised exception %s)list_afterfork_registryitemssort	Exceptionr   )rl   indexidentrY   objes         r#   _run_after_forkersrs      s    $**,,--E	JJLLL%* 8 8!tc	8DIIII 	8 	8 	83Q77777777	88 8s   A
A7A22A7c                 ^    | t           t          t                    t          |           |f<   d S N)rk   next_afterfork_counterid)rq   rY   s     r#   r   r      s)    EH0112c77DABBBr$   c                   F    e Zd ZdZd	dZdeeej        fdZ	d Z
d Zd ZdS )
r   zA
    Class which supports object finalization using weakrefs
    r,   Nc                    |Et          |t                    s0t          d                    |t	          |                              |t          j        ||           | _        n|t          d          || _	        || _
        |pi | _        |t          t                    f| _        t          j                    | _        | t$          | j        <   d S )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.J$ELL $|"4"46 67 7 7 ?#KT22DMM!JKKK!
|!4(:#;#;<	IKK	)-DI&&&r$   c                 @   	 || j         = | j         |            k    r |d           d}n4 |d| j        | j        | j                    | j        | j        i | j        }dx| _        x| _        x| _        x| _        | _         |S # t          $ r  |d           Y dS 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    	#DI. yFFHH$$	GHHH	K.$*dlD D D$dndjADLAA7;<DM <DN <TZ < L49J  	8 	8 	8I6777777	8s   B BBc                     	 t           | j        = dx| _        x| _        x| _        x| _        | _        dS # t          $ r Y dS w xY w)z3
        Cancel finalization of the object
        N)r   r   r   r   r   r   r   r   s    r#   cancelzFinalize.cancel   sg    	<#DI.
 8<<DM <DN <TZ < L4999	  	 	 	DD	s   4 
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     y///r$   c                    	 |                                  }n# t          t          f$ r d }Y nw xY w|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 )
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   	--//CC	* 	 	 	CCC	 ;&)@@@  '''
DNCCCE : 	-S__,,A< 	1s4<0000A9Q<#"S1%6%666A3ws    --)r,   NN)r   
__module____qualname____doc__r   r   r   r   r   r   r   r   r   r,   r$   r#   r   r      s         . . . .&  &9$RY	   0
< 
< 
<0 0 0    r$   r   c                     t           dS  d n fdfdt          t                     D             }|                    d           |D ]b}t                               |          }|Dt	          d|           	  |             :# t
          $ r ddl}|                                 Y ^w xY wc t                                            dS dS )	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                 0    | d         d uo| d         k    S rV   r,   )r   minprioritys    r#   r   z!_run_finalizers.<locals>.<lambda>  s    qt4'?AaDK,? r$   c                 *    g | ]} |          |S r,   r,   ).0keyfs     r#   
<listcomp>z#_run_finalizers.<locals>.<listcomp>&  s&    ???C#?C???r$   T)reversez
calling %sr   )	r   rj   rm   re   r   rn   	traceback	print_excclear)r   keysr   	finalizerr   r   s   `    @r#   _run_finalizersr     s     " 	''???? @???4 344???DIIdI 	& 	&'++C00	 lI...&	 & & &    ##%%%%%&	 ! !!##### s   >
B		"B.-B.c                  "    t           p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            |            p |            D ]3}|j        r* | d|j                   |j                                         4 |            D ]'} | d|j                   |                                 ( |d            |             d S d S )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CC?( %_&& ) )8 )D<afEEEH&&((($_&&  4af===9:::? r$   c                   &    e Zd Zd Zd Zd Zd ZdS )r   c                     t          j                    | _        | j        j        | _        | j        j        | _        t          | t          j                   d S ru   )	threadingLock_lockacquirereleaser   r   _at_fork_reinitr   s    r#   r   zForkAwareThreadLock.__init__t  sC    ^%%
z)z)D"5"EFFFFFr$   c                 8    | j                                          d S ru   )r   r   r   s    r#   r   z#ForkAwareThreadLock._at_fork_reinitz  s    
""$$$$$r$   c                 4    | j                                         S ru   )r   	__enter__r   s    r#   r   zForkAwareThreadLock.__enter__}  s    z##%%%r$   c                       | j         j        | S ru   )r   __exit__)r   r"   s     r#   r   zForkAwareThreadLock.__exit__  s    "tz"D))r$   N)r   r   r   r   r   r   r   r,   r$   r#   r   r   s  sS        G G G% % %& & &* * * * *r$   r   c                       e Zd Zd Zd ZdS )r   c                 (    t          | d            d S )Nc                 4    | j                                         S ru   )__dict__r   )rq   s    r#   r   z)ForkAwareLocal.__init__.<locals>.<lambda>  s    s|/A/A/C/C r$   )r   r   s    r#   r   zForkAwareLocal.__init__  s    D"C"CDDDDDr$   c                 $    t          |           dfS )Nr,   )r}   r   s    r#   
__reduce__zForkAwareLocal.__reduce__  s    Dzz2~r$   N)r   r   r   r   r   r,   r$   r#   r   r     s5        E E E    r$   r   SC_OPEN_MAX   c                 (   t          |           dt          gz   } |                                  | d         t          k    s
J d            t          t	          |           dz
            D ])}t          j        | |         dz   | |dz                       *d S )Nzfd too larger   )rj   MAXFDrm   rangelenr   
closerange)fdsis     r#   r   r     s    
s))r5k
!CHHJJJr7e^3s88a<   * *
c!fQhAaC))))* *r$   c                     t           j        d S 	 t           j                                         n# t          t          f$ r Y nw xY w	 t          j        t
          j        t
          j                  } 	 t          | dd          t           _        d S #  t          j        |             xY w# t          t          f$ r Y d S w xY w)Nzutf-8F)encodingclosefd)	rI   stdincloseOSErrorr   r   opendevnullO_RDONLY)fds    r#   _close_stdinr     s    
y	Z    WRZ--	R'5AAACIII	HRLLLZ    s3   / AA)B) 1B B&&B) )B>=B>c                      	 t           j                                         n# t          t          f$ r Y nw xY w	 t           j                                         d S # t          t          f$ r Y d S w xY wru   )rI   stdoutflushr   r   stderrr,   r$   r#   _flush_std_streamsr     s    
J'   
J'   s   ! 55A A.-A.c                    dd l }dd l}t          t          t	          t
          |                              }t          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   0B( (*Cc                  8    | D ]}t          j        |           dS )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                                         ddlm} |j	                                         t                       |                                  |                                  dS )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    s       +*****  """ 100000&,,... 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     sD   
			     



       3 3 3 3 3 3         

	
F 
8 8 85 5 54 4 4: : :  6   *  A A A A@BB 
2 
2 
2  $ 2g133 $Y_&& 8 8 8I I I  $Y_&& S S S S Sv S S Sl&$ &$ &$ &$X( ( ( E?#*#:#*#:( ( ( (T    * * * * *& * * *"    Y_   BJ}%%EE   EEE* * *  .              s   5D DD