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ÚstopÚwin32Ú DupSocketc@seZdZdd„Zdd„ZdS)rcs(| ¡‰‡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)N)rÚget_connectionrZ recv_bytesÚsocketZ fromshare)rr r r r rÚdetach$szDupSocket.detachN)Ú__name__Ú __module__Ú __qualname__rrr r r rrsÚDupFdc@seZdZdd„Zdd„ZdS)rcs4t |¡‰‡fdd„}‡fdd„}t ||¡|_dS)Ncst |ˆ|¡dS)N)rZ send_handle)r r )Únew_fdr rr1szDupFd.__init__..sendcst ˆ¡dS)N)Úosrr )rr rr3szDupFd.__init__..close)rrrrr)rÚfdrrr )rrr/s   zDupFd.__init__c Cs"t |j¡ }t |¡SQRXdS)N)rrrrZ recv_handle)rr r r rr7sz DupFd.detachN)rrrrrr r r rr-sc@sJeZdZdd„Zdd„Zedd„ƒZddd „Zd d „Zd d „Z dd„Z dS)Ú_ResourceSharercCs@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 rr?s z_ResourceSharer.__init__c CsN|j>|jdkr| ¡|jd7_||f|j|j<|j|jfSQRXdS)Nr)r'r)Ú_startr"r#)rrrr r rrIs  z_ResourceSharer.registercCs<ddlm}|\}}||t ¡jd}| |t ¡f¡|S)Nr)ÚClient)Úauthkey)Ú connectionr-rÚcurrent_processr.rrÚgetpid)Zidentr-ÚaddressÚkeyÚcr r rrRs  z_ResourceSharer.get_connectionNc Csºddlm}|jž|jdk r¬||jt ¡jd}| d¡| ¡|j   |¡|j   ¡rdt   d¡|j ¡d|_ d|_d|_x |j ¡D]\}\}}|ƒqŒW|j ¡WdQRXdS)Nr)r-)r.z._ResourceSharer thread did not stop when asked)r/r-r'r)rr0r.rrr*ÚjoinZis_aliverZ sub_warningr(r#ÚitemsÚclear)rZtimeoutr-r4r3rrr r rr[s"        z_ResourceSharer.stopcCsnx |j ¡D]\}\}}|ƒq W|j ¡|j |j¡t ¡|_|jdk rX|j  ¡d|_d|_ d|_ dS)N) r#r6r7r$Úappendr'r%r&r(rr)r*)rr3rrr r rr+ps     z_ResourceSharer._afterforkcCsXddlm}t d¡|t ¡jd|_|jj|_ t j |j d}d|_ | ¡||_dS)Nr)ÚListenerz0starting listener and thread for sending handles)r.)ÚtargetT)r/r9rÚdebugrr0r.r(r2r)r%ZThreadÚ_serveZdaemonÚstartr*)rr9Útr r rr,~s   z_ResourceSharer._startc Csªttdƒr t tjtdtjƒ¡x„y\|j ¡H}| ¡}|dkrBP|\}}|j   |¡\}}z|||ƒWd|ƒXWdQRXWq"t   ¡sœt jt  ¡ŽYq"Xq"WdS)NÚpthread_sigmaskr)ÚhasattrÚsignalr?Ú SIG_BLOCKÚrangeÚNSIGr(ZacceptZrecvr#ÚpoprZ is_exitingÚsysÚ excepthookÚexc_info)rr Úmsgr3Zdestination_pidrrr r rr<‰s   z_ResourceSharer._serve)N) rrrrrÚ staticmethodrrr+r,r<r r r rr!=s   r!)rrArrFr%ÚrÚcontextrrÚ__all__ÚplatformÚobjectrrr!rrr r r rÚ s       `