\d ddlZddlZddlZddlZddlZddlmZddlmZddlm Z dgZ ej dkre dgz Z Gd de Z ne d gz Z Gd d e ZGd d e ZeZejZdS)N)process) reduction)utilstopwin32 DupSocketceZdZdZdZdZdS)r zPicklable wrapper for a socket.c|fd}t|j|_dS)Nc\|}||dSN)share send_bytes)connpidrnew_socks 0..\python\lib\multiprocessing\resource_sharer.pysendz DupSocket.__init__..sends, s++&&&&&)dup_resource_sharerregisterclose_id)selfsockrrs @r__init__zDupSocket.__init__sHxxzzH ' ' ' ' '(00x~FFDHHHrct|j5}|}t j|cdddS#1swxYwYdS)z1Get the socket. This should only be called once.N)rget_connectionr recv_bytessocket fromshare)rrrs rdetachzDupSocket.detach$s!00:: /d))'.. / / / / / / / / / / / / / / / / / /s(AAAN__name__ __module__ __qualname____doc__rr#rrr r s;-- G G G / / / / /rDupFdceZdZdZdZdZdS)r*z-Wrapper for fd which can be used at any time.ctj|fd}fd}t|||_dS)Nc4tj||dSr )r send_handle)rrnew_fds rrzDupFd.__init__..send1s%dFC88888rc0tjdSr )osr)r/srrzDupFd.__init__..close3s     r)r1rrrr)rfdrrr/s @rrzDupFd.__init__/s]VBZZF 9 9 9 9 9 ! ! ! ! !'00u==DHHHrct|j5}tj|cdddS#1swxYwYdS)z-Get the fd. This should only be called once.N)rrrr recv_handle)rrs rr#z DupFd.detach7s!00:: 3d ,T22 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3sAAANr$r)rrr*r*-s8;; > > > 3 3 3 3 3rcNeZdZdZdZdZedZd dZdZ dZ d Z dS) _ResourceSharerz.Manager for resources using background thread.cd|_i|_tj|_d|_d|_d|_tj |tj dS)Nr) _key_cache threadingLock_lock _listener_address_threadrregister_after_forkr6 _afterfork)rs rrz_ResourceSharer.__init__?sP  ^%%     'ABBBBBrc|j5|j||xjdz c_||f|j|j<|j|jfcdddS#1swxYwYdS)z+Register resource, returning an identifier.Nr)r<r>_startr8r9)rrrs rrz_ResourceSharer.registerHs Z . .}$ IINII&*E]DK "M49-  . . . . . . . . . . . . . . . . . .sA AA#&A#cddlm}|\}}||tjj}||t jf|S)zrrJrHrrr?joinis_aliver sub_warningr=r9itemsclear)rtimeoutrFrOrNrrs rrz_ResourceSharer.stopZs&&&&&& Z $ $}(F4=#*#:#<#<#DFFFt   !!'***<((**<$&;<<<$$&&&# $ !%*.+*;*;*=*=&C$EGGGG !!###! $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $sDD//D36D3c,|jD]\}\}}||j|j|j|jd|_d|_d|_dSr ) r9rTrUr<_at_fork_reinitr=rr>r?)rrNrrs rrAz_ResourceSharer._afterforkos"&+"3"3"5"5   C$ EGGGG  ""$$$ > % N " " "  rcDddlm}|j Jdtjd|t jj|_|jj|_ tj |j }d|_ |||_dS)Nr)ListenerzAlready have Listenerz0starting listener and thread for sending handlesrG)targetT)rIrZr=rdebugrrJrHrMr>r:Thread_servedaemonstartr?)rrZts rrCz_ResourceSharer._startzs((((((~%%'>%%% EFFF!'*A*C*C*KLLL.  DK 0 0 0   rcDttdr0tjtjtj |j5}|}| ddddS|\}}|j |\}} ||||n#|wxYw dddn #1swxYwYn9#tj stj tjYnxYw)Npthread_sigmask)hasattrsignalrc SIG_BLOCK valid_signalsr=acceptrecvr9popr is_exitingsys excepthookexc_info)rrmsgrNdestination_pidrrs rr^z_ResourceSharer._serveso 6, - - M  "6#3V5I5K5K L L L 4 4^**,,  ))++C{         ,/(C"&+//#"6"6KD% T?333                 4((4NCLNN33 4sTC(!C9 C("C) C5 C C  C C(C  C(#C $C((4Dr ) r%r&r'r(rr staticmethodrrrArCr^r)rrr6r6=s88CCC...\$$$$*      44444rr6)r1rer!rlr:rcontextrr__all__platformobjectr r*r6rrr)rrrwsE  (<7 }G / / / / /F / / / /  yG 3 3 3 3 3 3 3 3 Y4Y4Y4Y4Y4fY4Y4Y4x#?$$r