3
\Í ã @ s² d dl Z d dlZd dlZd dlZd dlZddlmZ ddlmZ ddlm Z dgZ
ejdkrxe
dg7 Z
G d d„ deƒZ
ne
d
g7 Z
G dd
„ d
eƒZG dd
„ d
eƒZeƒ ZejZdS )é Né )Úprocess)Ú reduction)ÚutilÚstopZwin32Ú DupSocketc @ s e Zd Zdd„ Zdd„ ZdS )r c s( |j ƒ ‰ ‡ fdd„}tj|ˆ jƒ| _d S )Nc s ˆ j |ƒ}| j|ƒ d S )N)ÚshareZ
send_bytes)ÚconnÚpidr )Únew_sock© ú7/usr/lib64/python3.6/multiprocessing/resource_sharer.pyÚsend s
z DupSocket.__init__..send)ÚdupÚ_resource_sharerÚregisterÚcloseÚ_id)ÚselfZsockr r )r r
Ú__init__ s zDupSocket.__init__c C s* t j| jƒ�}|jƒ }tj|ƒS Q R X d S )N)r Úget_connectionr Z
recv_bytesÚsocketZ fromshare)r r r r r r
Údetach$ s zDupSocket.detachN)Ú__name__Ú
__module__Ú__qualname__r r r r r r
r s ÚDupFdc @ s e Zd Zdd„ Zdd„ ZdS )r c s4 t j|ƒ‰ ‡ fdd„}‡ fdd„}tj||ƒ| _d S )Nc s t j| ˆ |ƒ d S )N)r Zsend_handle)r r
)Únew_fdr r
r 1 s zDupFd.__init__..sendc s t jˆ ƒ d S )N)Úosr r )r r r
r 3 s zDupFd.__init__..close)r r r r r )r Úfdr r r )r r
r / s
zDupFd.__init__c C s" t j| jƒ�}tj|ƒS Q R X d S )N)r r r r Zrecv_handle)r r r r r
r 7 s zDupFd.detachN)r r r r r r r r r
r - s c @ sJ e Zd Zdd„ Zdd„ Zedd„ ƒZddd „Zd
d„ Zdd
„ Z dd„ Z
dS )Ú_ResourceSharerc C s@ d| _ i | _g | _tjƒ | _d | _d | _d | _t j
| tjƒ d S )Nr )
Ú_keyÚ_cacheÚ
_old_locksÚ threadingÚLockÚ_lockÚ _listenerÚ_addressÚ_threadr Zregister_after_forkr Ú
_afterfork)r r r r
r ? s
z_ResourceSharer.__init__c
C sN | j �> | jd kr| jƒ | jd7 _||f| j| j<