o
    OZh6                     @   s  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d Zdd Zdd Zdd Zdd Zd?ddZdd Zdd Ze Zdd Zdd  Ze Z e! Z"d!d" Z#d#d$ Z$i Z%e! Z&G d%d& d&e'Z(d?d'd(Z)d)d* Z*da+eee)e	j,e	j-fd+d,Z.e/e. G d-d. d.e'Z0G d/d0 d0ej1Z2ze 3d1Z4W n e5y   d2Z4Y nw d3d4 Z6d5d6 Z7d7d8 Z8d9d: Z9d;d< Z:d=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   
         multiprocessz+[%(levelname)s/%(processName)s] %(message)sFc                 G       t rt jt| g|R   d S d S N)_loggerlogr   msgargs r    H/var/www/html/lang_env/lib/python3.10/site-packages/multiprocess/util.pyr   ,      r   c                 G   r   r   )r   r   DEBUGr   r    r    r!   r   0   r"   r   c                 G   r   r   )r   r   INFOr   r    r    r!   r   4   r"   r   c                 G   r   r   )r   r   r   r   r    r    r!   r   8   r"   r   c                  C   s   ddl } |   zAts<| tadt_ttdr#tt	 t
t	 n tjt	di f tjt	di f W |   tS W |   tS W |   tS |   w )z-
    Returns logger used by multiprocess
    r   N
unregisterr    )logging_acquireLockr   	getLoggerLOGGER_NAME	propagatehasattratexitr%   _exit_functionregisterZ_exithandlersremoveappend_releaseLock)r&   r    r    r!   r	   <   s(   



r	   c                 C   sJ   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handlerr    r    r!   r
   W   s   



r
   c                   C   s    t jdkrdS tt drdS dS )NlinuxTgetandroidapilevelF)sysplatformr+   r    r    r    r!   #_platform_supports_abstract_socketsl   s
   

rA   c                 C   sD   | 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)addressr    r    r!   is_abstract_socket_namespacet   s   

rH   c                 C   s*   | | t  }|d urd |jd< d S d S )Ntempdir)r   current_process_config)rmtreerI   rJ   r    r    r!   _remove_temp_dir   s
   rM   c                  C   sf   t  jd} | d u r1dd l}dd l}|jdd} td|  td t	|j
| fdd | t  jd< | S )NrI   r   zpymp-)prefixzcreated temp directory %si)r   exitpriority)r   rJ   rK   getshutiltempfilemkdtempr   r   rM   rL   )rI   rQ   rR   r    r    r!   r      s   
r   c                  C   sf   t t } |   | D ]$\\}}}}z|| W q ty0 } ztd| W Y d }~qd }~ww d S )Nz after forker raised exception %s)list_afterfork_registryitemssort	Exceptionr   )rV   indexidentfuncobjer    r    r!   _run_after_forkers   s   r^   c                 C   s   | t ttt| |f< d S r   )rU   next_afterfork_counterid)r\   r[   r    r    r!   r      s   r   c                   @   sF   e Zd ZdZdddZdeeejfddZ	dd	 Z
d
d Zdd ZdS )r   zA
    Class which supports object finalization using weakrefs
    r    Nc                 C   s   |d urt |tstd|t||d urt|| | _n|d u r'td|| _	|| _
|p0i | _|ttf| _t | _| t| j< d S )Nz3Exitpriority ({0!r}) must be None or int, not {1!s}z+Without object, exitpriority cannot be None)rC   intrF   formattypeweakrefref_weakref
ValueError	_callback_args_kwargsr_   _finalizer_counter_keyosgetpid_pid_finalizer_registry)selfr\   callbackr   kwargsrO   r    r    r!   __init__   s    

zFinalize.__init__c                 C   s   z|| j = W n ty   |d Y dS w | j| kr"|d d}n|d| j| j| j | j| ji | j}d | _ | _ | _ | _| _ |S )zQ
        Run the callback unless it has already been called or cancelled
        zfinalizer no longer registeredz+finalizer ignored because different processNz/finalizer calling %s with args %s and kwargs %s)rm   KeyErrorrp   ri   rj   rk   rg   )rr   wrrq   r   ro   resr    r    r!   __call__   s    zFinalize.__call__c                 C   sD   zt | j= W n
 ty   Y dS w d | _ | _ | _ | _| _dS )z3
        Cancel finalization of the object
        N)rq   rm   rv   rg   ri   rj   rk   rr   r    r    r!   cancel   s   zFinalize.cancelc                 C   s
   | j tv S )zS
        Return whether this finalizer is still waiting to invoke callback
        )rm   rq   rz   r    r    r!   still_active   s   
zFinalize.still_activec              	   C   s   z|   }W n ttfy   d }Y nw |d u rd| jj S d| jjt| jd| jf }| jr8|dt| j 7 }| j	rD|dt| j	 7 }| j
d d urV|dt| j
d  7 }|d S )	Nz<%s object, dead>z<%s object, callback=%s__name__z, args=z	, kwargs=r   z, exitpriority=>)rg   AttributeErrorrF   	__class__r}   getattrri   rj   rE   rk   rm   )rr   r\   xr    r    r!   __repr__   s$   zFinalize.__repr__)r    NN)r}   
__module____qualname____doc__ru   rq   r   rn   ro   ry   r{   r|   r   r    r    r    r!   r      s    

r   c              	      s   t du rdS du rdd  nfdd  fddtt D }|jdd |D ]'}t |}|durOtd	| z|  W q( tyN   d
dl}|  Y q(w q(du rZt   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                 S   s   | d d uS Nr   r    pr    r    r!   <lambda>  s    z!_run_finalizers.<locals>.<lambda>c                    s   | d d uo| d  kS r   r    r   )minpriorityr    r!   r         c                    s   g | ]} |r|qS r    r    ).0key)fr    r!   
<listcomp>#  r   z#_run_finalizers.<locals>.<listcomp>T)reversez
calling %sr   )	rq   rT   rW   rP   r   rX   	traceback	print_excclear)r   keysr   	finalizerr   r    )r   r   r!   _run_finalizers  s*   



r   c                   C   s   t pt du S )z6
    Returns true if the process is shutting down
    N)_exitingr    r    r    r!   r   8  s   r   c                 C   s   t sBda | d |d |d | d ur9| D ]}|jr(| d|j |j  q| D ]}| d|j |  q,|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nameZ_popen	terminatejoin)r   r   r   active_childrenrJ   r   r    r    r!   r-   @  s"   	





r-   c                   @   s,   e Zd Zdd Zdd Zdd Zdd Zd	S )
r   c                 C   s.   t  | _| jj| _| jj| _t| tj d S r   )	threadingLock_lockacquirereleaser   r   _at_fork_reinitrz   r    r    r!   ru   q  s   


zForkAwareThreadLock.__init__c                 C   s   | j   d S r   )r   r   rz   r    r    r!   r   w  s   z#ForkAwareThreadLock._at_fork_reinitc                 C   
   | j  S r   )r   	__enter__rz   r    r    r!   r   z  s   
zForkAwareThreadLock.__enter__c                 G   s   | j j| S r   )r   __exit__)rr   r   r    r    r!   r   }     zForkAwareThreadLock.__exit__N)r}   r   r   ru   r   r   r   r    r    r    r!   r   p  s
    r   c                   @   s   e Zd Zdd Zdd ZdS )r   c                 C   s   t | dd  d S )Nc                 S   r   r   )__dict__r   )r\   r    r    r!   r     s   
 z)ForkAwareLocal.__init__.<locals>.<lambda>)r   rz   r    r    r!   ru     s   zForkAwareLocal.__init__c                 C   s   t | dfS )Nr    )rd   rz   r    r    r!   
__reduce__  r   zForkAwareLocal.__reduce__N)r}   r   r   ru   r   r    r    r    r!   r     s    r   SC_OPEN_MAX   c                 C   sb   t | dtg } |   | d tksJ dtt| d D ]}t| | d | |d   qd S )Nzfd too larger   )rT   MAXFDrW   rangelenrn   
closerange)fdsir    r    r!   r     s   r   c               	   C   s   t jd u rd S zt j  W n ttfy   Y nw zttjtj} zt| dddt _W W d S    t|    ttfyD   Y d S w )Nzutf-8F)encodingclosefd)	r?   stdincloseOSErrorrh   rn   opendevnullO_RDONLY)fdr    r    r!   _close_stdin  s"   

r   c                	   C   sP   zt j  W n ttfy   Y nw zt j  W d S  ttfy'   Y d S w r   )r?   stdoutflushr   rh   stderrr    r    r    r!   _flush_std_streams  s   r   c                 C   s   dd l }tttt|}t \}}z(||t| gd|d d dddddd||ddd d d dd W t	| t	| S t	| t	| w )Nr   Tr   F)
_posixsubprocesstuplesortedmaprb   rn   pipe	fork_execfsencoder   )pathr   Zpassfdsr   errpipe_readerrpipe_writer    r    r!   spawnv_passfds  s   

r   c                  G   s   | D ]}t | qdS )z/Close each file descriptor given as an argumentN)rn   r   )r   r   r    r    r!   	close_fds  s   r   c                  C   sZ   ddl m}  t  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   Z_forkserver_stopr   Z_resource_trackerr   Z
gc_collectZreap_children)r   r   r   r    r    r!   _cleanup_tests  s   

r   r   )<rn   	itertoolsr?   re   r,   r   
subprocessr    r   __all__NOTSETr   r#   r$   r   r)   r3   r   r8   r   r   r   r   r	   r
   rA   rH   Zabstract_sockets_supportedrM   r   WeakValueDictionaryrU   countr`   r^   r   rq   rl   objectr   r   r   r   r   rJ   r-   r.   r   localr   sysconfr   rX   r   r   r   r   r   r   r    r    r    r!   <module>   sr   	

		
V,

*

