U ,a@sddlZddlZddlZddlZddlZddlmZddlmZddlm Z dgZ ej dkrxe dg7Z Gd dde Z ne d g7Z Gd d d e ZGd d d e ZeZejZdS)N)process) reduction)utilstopZwin32 DupSocketc@s eZdZdZddZddZdS)rzPicklable wrapper for a socket.cs(|fdd}t|j|_dS)Ncs|}||dSN)shareZ send_bytes)connpidr Znew_sockD/opt/alt/python38/lib64/python3.8/multiprocessing/resource_sharer.pysends z DupSocket.__init__..send)dup_resource_sharerregisterclose_id)selfZsockrr r r__init__s zDupSocket.__init__c Cs6t|j }|}t|W5QRSQRXdS)z1Get the socket. This should only be called once.N)rget_connectionrZ recv_bytessocketZ fromshare)rr r r r rdetach$szDupSocket.detachN__name__ __module__ __qualname____doc__rrr r r rrsDupFdc@s eZdZdZddZddZdS)rz-Wrapper for fd which can be used at any time.cs4t|fdd}fdd}t|||_dS)Ncst||dSr)rZ send_handle)r r Znew_fdr rr1szDupFd.__init__..sendcstdSr)osrr r r rr3szDupFd.__init__..close)r!rrrr)rfdrrr r rr/s   zDupFd.__init__c Cs.t|j}t|W5QRSQRXdS)z-Get the fd. This should only be called once.N)rrrrZ recv_handle)rr r r rr7sz DupFd.detachNrr r r rr-sc@sNeZdZdZddZddZeddZdd d Zd d Z d dZ ddZ 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 threadingLock_lock _listener_address_threadrZregister_after_forkr# _afterfork)rr r rr?s z_ResourceSharer.__init__c CsZ|jJ|jdkr||jd7_||f|j|j<|j|jfW5QRSQRXdS)z+Register resource, returning an identifier.Nr)r)r+_startr$r%)rrrr r rrIs  z_ResourceSharer.registercCs<ddlm}|\}}||tjd}||tf|S)z s       `