B Žp¾ õV»ã@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(| ¡‰‡fdd„}t |ˆj¡|_dS)Ncsˆ |¡}| |¡dS)N)ÚshareZ send_bytes)ÚconnÚpidr)Únew_sock©úB/opt/alt/python37/lib/python3.7/multiprocessing/resource_sharer.pyÚsends z DupSocket.__init__..send)ÚdupÚ_resource_sharerÚregisterÚcloseÚ_id)ÚselfZsockrr )r r Ú__init__s zDupSocket.__init__c Cs*t |j¡}| ¡}t |¡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.cs4t |¡‰‡fdd„}‡fdd„}t ||¡|_dS)Ncst |ˆ|¡dS)N)rZ send_handle)r r )Únew_fdr r r1szDupFd.__init__..sendcst ˆ¡dS)N)Úosrr )rr r r3szDupFd.__init__..close)rrrrr)rÚfdrrr )rr r/s   zDupFd.__init__c Cs"t |j¡ }t |¡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 resources using background thread.cCs@d|_i|_g|_t ¡|_d|_d|_d|_t   |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| ¡|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}|\}}||t ¡jd}| |t ¡f¡|S)z s       `