Your IP : 18.119.122.32


Current Path : /lib64/python3.6/multiprocessing/__pycache__/
Upload File :
Current File : //lib64/python3.6/multiprocessing/__pycache__/semaphore_tracker.cpython-36.pyc

3


 \�@s�ddlZddlZddlZddlZddlZddlZddlmZddlmZdddgZ	Gdd	�d	e
�Ze�Zej
Z
ejZejZejZd
d�ZdS)�N�)�spawn)�util�ensure_running�register�
unregisterc@s<eZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
S)�SemaphoreTrackercCstj�|_d|_d|_dS)N)�	threadingZLock�_lock�_fd�_pid)�self�r�)/usr/lib64/python3.6/semaphore_tracker.py�__init__s
zSemaphoreTracker.__init__cCs|j�|jS)N)rr)r
rrr�getfd"szSemaphoreTracker.getfdc	Cs|j��|jdk	rRtj|jtj�\}}|s0dStj|j�d|_d|_tjd�g}y|j	t
jj��Wnt
k
r~YnXd}tj�\}}zlyB|j	|�tj�}|gtj�}|d||g7}tj|||�}Wntj|��YnX||_||_Wdtj|�XWdQRXdS)z�Make sure that semaphore tracker process is running.

        This can be run from any process.  Usually a child process will use
        the semaphore created by its parent.NzWsemaphore_tracker: process died unexpectedly, relaunching.  Some semaphores might leak.z;from multiprocessing.semaphore_tracker import main;main(%d)z-c)r
r�os�waitpid�WNOHANG�closer�warnings�warn�append�sys�stderr�fileno�	Exception�piperZget_executablerZ_args_from_interpreter_flagsZspawnv_passfds)	r
�pidZstatusZfds_to_pass�cmd�r�wZexe�argsrrrr&s8





zSemaphoreTracker.ensure_runningcCs|jd|�dS)z2Register name of semaphore with semaphore tracker.ZREGISTERN)�_send)r
�namerrrrQszSemaphoreTracker.registercCs|jd|�dS)z4Unregister name of semaphore with semaphore tracker.Z
UNREGISTERN)r#)r
r$rrrrUszSemaphoreTracker.unregistercCsP|j�dj||�jd�}t|�dkr.td��tj|j|�}|t|�ksLt�dS)Nz{0}:{1}
�asciiiz
name too long)	r�format�encode�len�
ValueErrorr�writer�AssertionError)r
rr$�msg�nbytesrrrr#YszSemaphoreTracker._sendN)	�__name__�
__module__�__qualname__rrrrrr#rrrrrs+rc-Cs�tjtjtj�tjtjtj�x6tjtjfD]&}y|j�Wq.tk
rRYq.Xq.Wt	�}z�t
|d���}x�|D]�}yJ|j�jd�\}}|dkr�|j
|�n |dkr�|j|�ntd|��Wqrtk
r�ytjtj��WnYnXYqrXqrWWdQRXWd|�r<ytjdt|��Wntk
�r:YnXxf|D]^}zT|jd�}ytj|�Wn6tk
�r�}ztjd	||f�WYdd}~XnXWdX�qBWXdS)
zRun semaphore tracker.�rb�:sREGISTERs
UNREGISTERzunrecognized command %rNzRsemaphore_tracker: There appear to be %d leaked semaphores to clean up at shutdownr%zsemaphore_tracker: %r: %s)�signal�SIGINT�SIG_IGN�SIGTERMr�stdin�stdoutrr�set�open�strip�split�add�remove�RuntimeError�
excepthook�exc_inforrr(�decode�_multiprocessingZ
sem_unlink)�fd�f�cache�linerr$�errr�mainksJ



(rI)rr3rr	rrC�rr�__all__�objectrZ_semaphore_trackerrrrrrIrrrr�<module>s
I