3 \Íã@s²ddlZddlZddlZddlZddlZddlmZddlmZddlm Z dgZ ej dkrxe dg7Z Gd d„de ƒZ ne d g7Z Gd d „d e ƒZGd d „d e ƒZeƒZejZdS)éNé)Úprocess)Ú reduction)ÚutilÚstopZwin32Ú DupSocketc@s eZdZdZdd„Zdd„ZdS)rzPicklable wrapper for a socket.cs(|jƒ‰‡fdd„}tj|ˆjƒ|_dS)Ncsˆj|ƒ}|j|ƒdS)N)ÚshareZ send_bytes)ÚconnÚpidr)Únew_sock©ú7/usr/lib64/python3.6/multiprocessing/resource_sharer.pyÚsends z DupSocket.__init__..send)ÚdupÚ_resource_sharerÚregisterÚcloseÚ_id)ÚselfZsockrr )r r Ú__init__s zDupSocket.__init__c Cs*tj|jƒ�}|jƒ}tj|ƒSQRXdS)z1Get the socket. This should only be called once.N)rÚget_connectionrZ recv_bytesÚsocketZ fromshare)rr rr r r Údetach$szDupSocket.detachN)Ú__name__Ú __module__Ú __qualname__Ú__doc__rrr r r r rsÚDupFdc@s eZdZdZdd„Zdd„ZdS)rz-Wrapper for fd which can be used at any time.cs4tj|ƒ‰‡fdd„}‡fdd„}tj||ƒ|_dS)Ncstj|ˆ|ƒdS)N)rZ send_handle)r r )Únew_fdr r r1szDupFd.__init__..sendcstjˆƒdS)N)Úosrr )rr r r3szDupFd.__init__..close)rrrrr)rÚfdrrr )rr r/s   zDupFd.__init__c Cs"tj|jƒ� }tj|ƒSQRXdS)z-Get the fd. This should only be called once.N)rrrrZ recv_handle)rr r r r r7sz DupFd.detachN)rrrrrrr r r r r-sc@sNeZdZdZdd„Zdd„Zedd„ƒZdd d „Zd d „Z d d„Z dd„Z dS)Ú_ResourceSharerz-Manager for resouces using background thread.cCs@d|_i|_g|_tjƒ|_d|_d|_d|_t j |t j ƒdS)Nr) Ú_keyÚ_cacheÚ _old_locksÚ threadingÚLockÚ_lockÚ _listenerÚ_addressÚ_threadrZregister_after_forkr!Ú _afterfork)rr r r r?s z_ResourceSharer.__init__c CsN|j�>|jdkr|jƒ|jd7_||f|j|j<|j|jfSQRXdS)z+Register resource, returning an identifier.Nr)r'r)Ú_startr"r#)rrrr r r rIs  z_ResourceSharer.registercCs<ddlm}|\}}||tjƒjd�}|j|tjƒfƒ|S)z s       `