U
    -e!                     @   s   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 dddgZe	edZ
ejejfZd	d
d iZe jdkrzd dlZW n ek
r   d dlZY nX d dlZeejejd G dd deZe ZejZejZejZejZdd ZdS )    N   )spawn)utilensure_runningregister
unregisterpthread_sigmaskZnoopc                   C   s   d S N r
   r
   r
   ^/var/www/html/Darija-Ai-Train/env/lib/python3.8/site-packages/multiprocess/resource_tracker.py<lambda>!       r   posix)Z	semaphoreZshared_memoryc                   @   sL   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dS )ResourceTrackerc                 C   s   t  | _d | _d | _d S r	   )	threadingLock_lock_fd_pidselfr
   r
   r   __init__3   s    
zResourceTracker.__init__c              	   C   sT   | j D | jd kr W 5 Q R  d S t| j d | _t| jd d | _W 5 Q R X d S )Nr   )r   r   osclosewaitpidr   r   r
   r
   r   _stop8   s    
zResourceTracker._stopc                 C   s   |    | jS r	   )r   r   r   r
   r
   r   getfdE   s    zResourceTracker.getfdc                 C   st  | j b | jdk	r~|  r*W 5 Q R  dS t| j z| jdk	rPt| jd W n tk
rf   Y nX d| _d| _t	d g }z|
tj  W n tk
r   Y nX d}t \}}zzr|
| t }|gt  }|d|| g7 }z&trttjt t|||}W 5 tr,ttjt X W n   t|  Y nX || _|| _W 5 t| X W 5 Q R X dS )zMake sure that resource tracker process is running.

        This can be run from any process.  Usually a child process will use
        the resource created by its parent.Nr   zUresource_tracker: process died unexpectedly, relaunching.  Some resources might leak.z7from multiprocess.resource_tracker import main;main(%d)z-c)r   r   _check_aliver   r   r   r   ChildProcessErrorwarningswarnappendsysstderrfileno	Exceptionpiper   get_executabler   _args_from_interpreter_flags_HAVE_SIGMASKsignalr   SIG_UNBLOCK_IGNORED_SIGNALS	SIG_BLOCKZspawnv_passfds)r   Zfds_to_passcmdrwexeargspidr
   r
   r   r   I   sJ    






zResourceTracker.ensure_runningc                 C   s2   zt | jd W n tk
r(   Y dS X dS dS )z;Check that the pipe has not been closed by sending a probe.s   PROBE:0:noop
FTN)r   writer   OSErrorr   r
   r
   r   r      s
    zResourceTracker._check_alivec                 C   s   |  d|| dS )z0Register name of resource with resource tracker.REGISTERN_sendr   namertyper
   r
   r   r      s    zResourceTracker.registerc                 C   s   |  d|| dS )z2Unregister name of resource with resource tracker.
UNREGISTERNr7   r9   r
   r
   r   r      s    zResourceTracker.unregisterc                 C   sb   |    d|||d}t|dkr0tdt| j|}|t|ks^td|t|d S )Nz{0}:{1}:{2}
asciii   zname too longznbytes {0:n} but len(msg) {1:n})	r   formatencodelen
ValueErrorr   r4   r   AssertionError)r   r.   r:   r;   msgnbytesr
   r
   r   r8      s     zResourceTracker._sendN)__name__
__module____qualname__r   r   r   r   r   r   r   r8   r
   r
   r
   r   r   1   s   @r   c           
      C   s  t  t jt j t  t jt j tr2t t jt tj	tj
fD ]&}z|  W q> tk
rb   Y q>X q>dd t D }zt| d}|D ]}z| dd\}}}t|d}	|	dkrtd	| d
| |dkr|| | n2|dkr|| | n|dkrntd| W q tk
rT   ztjt   W n   Y nX Y qX qW 5 Q R X W 5 | D ]\}}|rztdt||f  W n tk
r   Y nX |D ]V}zLzt| | W n6 tk
r } ztd||f  W 5 d}~X Y nX W 5 X qqnX dS )zRun resource tracker.c                 S   s   i | ]}|t  qS r
   )set).0r;   r
   r
   r   
<dictcomp>   s      zmain.<locals>.<dictcomp>zQresource_tracker: There appear to be %d leaked %s objects to clean up at shutdownzresource_tracker: %r: %sNrbr=   :zCannot register z. for automatic cleanup: unknown resource type r6   r<   ZPROBEzunrecognized command %r)r*   SIGINTSIG_IGNSIGTERMr)   r   r+   r,   r"   stdinstdoutr   r%   _CLEANUP_FUNCSkeysitemsr   r    r@   openstripdecodesplitgetrA   addremoveRuntimeError
excepthookexc_info)
fdfcacher;   Zrtype_cacher:   eliner.   Zcleanup_funcr
   r
   r   main   s^    



(rd   )r   r*   r"   r   r    r   r   __all__hasattrr)   rM   rO   r,   rR   r:   Z_multiprocess_multiprocessingImportErrorZ_posixshmemupdateZ
sem_unlinkZ
shm_unlinkobjectr   Z_resource_trackerr   r   r   r   rd   r
   r
   r
   r   <module>   s:   

 
w