o
    g#                     @   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 g dZe	edZ
ejejfZddd	 iZe jd
krWd dlZd dlZe	edrOedeji edeji 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_sigmasknoopc                   C   s   d S N r   r   r   V/Users/admin/.pyenv/versions/3.10.0/lib/python3.10/multiprocessing/resource_tracker.py<lambda>!   s    r   posix
sem_unlink	semaphore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__8   s   

zResourceTracker.__init__c                 C   sn   | j * | jd u r	 W d    d S t| j d | _t| jd d | _W d    d S 1 s0w   Y  d S )Nr   )r   r   osclosewaitpidr   r   r   r   r   _stop=   s   
"zResourceTracker._stopc                 C   s   |    | jS r
   )r   r   r   r   r   r   getfdJ   s   zResourceTracker.getfdc                 C   s  	 | j  | jd ur@|  r	 W d    d S t| j z| jd ur*t| jd W n	 ty4   Y nw d | _d | _t	d g }z
|
tj  W n	 tyU   Y nw d}t \}}zXzA|
| t }|gt  }|d|| g7 }ztrttjt t|||}W trttjt ntrttjt w w W n	   t|  || _|| _W t| nt| w W d    d S 1 sw   Y  d S )Nr   zUresource_tracker: process died unexpectedly, relaunching.  Some resources might leak.z:from multiprocessing.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_BLOCK_IGNORED_SIGNALSspawnv_passfdsSIG_UNBLOCK)r   fds_to_passcmdrwexeargspidr   r   r   r   N   s`   




"zResourceTracker.ensure_runningc                 C   s,   	 z
t | jd W dS  ty   Y dS w )Ns   PROBE:0:noop
FT)r   writer   OSErrorr   r   r   r   r       s   zResourceTracker._check_alivec                 C      	 |  d|| d S )NREGISTER_sendr   namertyper   r   r   r         zResourceTracker.registerc                 C   r;   )N
UNREGISTERr=   r?   r   r   r   r      rB   zResourceTracker.unregisterc                 C   sB   |    d|||d}t|dkrtdt| j|}d S )Nz{0}:{1}:{2}
asciii   zname too long)r   formatencodelen
ValueErrorr   r9   r   )r   r3   r@   rA   msgnbytesr   r   r   r>      s
   zResourceTracker._sendN)__name__
__module____qualname__r   r   r   r   r    r   r   r>   r   r   r   r   r   6   s    @r   c           
      C   s  	 t  t jt j t  t jt j trt t jt tj	tj
fD ]}z|  W q  ty1   Y q w dd t D }zt| dj}|D ]_}zF| dd\}}}t|d }|d u rhtd| d| |dkrt|| | n|d	kr|| | n|d
krntd| W qD ty   z	tjt   W n   Y Y qDw W d    n1 sw   Y  W | D ]I\}}|rztdt||f  W n	 ty   Y nw |D ])}z&zt| | W n ty }	 ztd||	f  W Y d }	~	nd }	~	ww W qw qd S | D ]N\}}|r'ztdt||f  W n
 ty&   Y nw |D ]+}z(zt| | W n tyP }	 ztd||	f  W Y d }	~	nd }	~	ww W q)w qw )Nc                 S   s   i | ]}|t  qS r   )set).0rA   r   r   r   
<dictcomp>   s    zmain.<locals>.<dictcomp>rbrD   :zCannot register z. for automatic cleanup: unknown resource type r<   rC   PROBEzunrecognized command %rzQresource_tracker: There appear to be %d leaked %s objects to clean up at shutdownzresource_tracker: %r: %s)r-   SIGINTSIG_IGNSIGTERMr,   r   r1   r/   r%   stdinstdoutr   r(   _CLEANUP_FUNCSkeysopenstripdecodesplitgetrH   addremoveRuntimeError
excepthookexc_infoitemsr"   r#   rG   )
fdfcacheliner3   r@   rA   cleanup_funcrtype_cacheer   r   r   main   s   



rm   )r   r-   r%   r   r"    r   r   __all__hasattrr,   rT   rV   r/   rY   r@   _multiprocessing_posixshmemupdater   
shm_unlinkobjectr   _resource_trackerr   r   r   r   rm   r   r   r   r   <module>   s:   


w