3 \ $ã@sddlmZmZddlZddlZddlZddlZddlZddlZddl Z ddl m Z ddddd gZ e j d kpŠeed ƒoŠeed ƒoŠeejd ƒZGdd„dejƒZejZd5dd „Ze j d k�re dddg7Z ddlZd6dd„Zdd„Zdd„Zdd„ZGdd„deƒZnHe dddg7Z ddlZe j dkZdd„Zdd„Zdd„Zd d„Zd!d„Zd"d#„Z Gd$d%„d%ƒZ!ee"e!ƒj#ƒe ƒd&d'„Z$ee"e%j&ƒe$ƒee"e'j(ƒe$ƒd(d)„Z)d*d+„Z*eej+e)ƒe j d k�râd,d-„Z,d.d/„Z-eeje,ƒnd0d-„Z,d1d/„Z-eeje,ƒGd2d3„d3ed4�Z.dS)7é)ÚABCMetaÚabstractmethodNé)ÚcontextÚ send_handleÚ recv_handleÚForkingPicklerÚregisterÚdumpÚwin32ZCMSG_LENÚ SCM_RIGHTSÚsendmsgcsFeZdZiZejZ‡fdd„Zedd„ƒZ eddd„ƒZ e j Z ‡Z S) rcs*tƒj|Ž|jjƒ|_|jj|jƒdS)N)ÚsuperÚ__init__Ú_copyreg_dispatch_tableÚcopyÚdispatch_tableÚupdateÚ_extra_reducers)ÚselfÚargs)Ú __class__©ú1/usr/lib64/python3.6/multiprocessing/reduction.pyr&s  zForkingPickler.__init__cCs||j|<dS)N)r)ÚclsÚtypeÚreducerrrr +szForkingPickler.registerNcCs tjƒ}|||ƒj|ƒ|jƒS)N)ÚioÚBytesIOr Ú getbuffer)rÚobjÚprotocolZbufrrrÚdumps0szForkingPickler.dumps)N)Ú__name__Ú __module__Ú __qualname__rÚcopyregrrrÚ classmethodr r"ÚpickleÚloadsÚ __classcell__rr)rrr!s   cCst||ƒj|ƒdS)N)rr )r Úfiler!rrrr :sÚ DupHandleÚ duplicateÚ steal_handleFcCs*|dkrtjƒ}tjtjƒ||d|tjƒS)Nr)Ú_winapiÚGetCurrentProcessÚDuplicateHandleÚDUPLICATE_SAME_ACCESS)ÚhandleZtarget_processZ inheritablerrrr-Gs  cCsBtjtjd|ƒ}z tj||tjƒddtjtjBƒStj|ƒXdS)NFr)r/Ú OpenProcessÚPROCESS_DUP_HANDLEr1r0r2ÚDUPLICATE_CLOSE_SOURCEÚ CloseHandle)Z source_pidr3Zsource_process_handlerrrr.Os  cCst|tj|ƒ}|j|ƒdS)N)r,r/r2Úsend)Úconnr3Údestination_pidZdhrrrr[scCs |jƒjƒS)N)ÚrecvÚdetach)r9rrrr`sc@seZdZddd„Zdd„ZdS)r,Nc Cs\|dkrtjƒ}tjtjd|ƒ}ztjtjƒ|||ddƒ|_Wdtj|ƒX||_ ||_ dS)NFr) ÚosÚgetpidr/r4r5r1r0Ú_handler7Ú_accessÚ_pid)rr3ÚaccessÚpidÚprocrrrrfs zDupHandle.__init__c CsV|jtjƒkr|jStjtjd|jƒ}ztj||jtjƒ|j dtj ƒStj |ƒXdS)NF) rAr=r>r?r/r4r5r1r0r@r6r7)rrDrrrr<us  zDupHandle.detach)N)r#r$r%rr<rrrrr,ds ÚDupFdÚsendfdsÚrecvfdsÚdarwincCsVtjd|ƒ}tt|ƒdgƒ}|j|gtjtj|fgƒtrR|jdƒdkrRt dƒ‚dS)NÚiéróAz%did not receive acknowledgement of fd) ÚarrayÚbytesÚlenr ÚsocketÚ SOL_SOCKETr Ú ACKNOWLEDGEr;Ú RuntimeError)ÚsockZfdsÚmsgrrrrF�s  c CsÜtjdƒ}|j|}|jdtj|ƒƒ\}}}}| r>| r>t‚yxtrN|jdƒt|ƒdkrjt dt|ƒƒ‚|d\}} } |tj kr´| tj kr´t| ƒ|jdkr¢t ‚|j | ƒt|ƒSWnt tfk rÎYnXt dƒ‚dS)NrIrrKzreceived %d items of ancdatarzInvalid data received)rLÚitemsizeZrecvmsgrOZ CMSG_SPACEÚEOFErrorrQr8rNrRrPr Ú ValueErrorZ frombytesÚlistÚ IndexError) rSÚsizeÚaZ bytes_sizerTZancdataÚflagsZaddrZ cmsg_levelZ cmsg_typeZ cmsg_datarrrrG•s*          c Cs2tj|jƒtjtjƒ�}t||gƒWdQRXdS)N)rOÚfromfdÚfilenoÚAF_UNIXÚ SOCK_STREAMrF)r9r3r:Úsrrrr®sc Cs0tj|jƒtjtjƒ�}t|dƒdSQRXdS)Nrr)rOr]r^r_r`rG)r9rarrrr³scCsFtjƒ}|dk r |j|j|ƒƒStr:ddlm}|j|ƒStdƒ‚dS)Nr)Úresource_sharerz&SCM_RIGHTS appears not to be available)rZget_spawning_popenrEZduplicate_for_childÚHAVE_SEND_HANDLEÚrbrW)ÚfdZ popen_objrbrrrrE¸s  cCs2|jdkrt|j|jjffSt|j|jjffSdS)N)Ú__self__ÚgetattrrÚ__func__r#)ÚmrrrÚ_reduce_methodÇs rjc@seZdZdd„ZdS)Ú_CcCsdS)Nr)rrrrÚfÍsz_C.fN)r#r$r%rlrrrrrkÌsrkcCst|j|jffS)N)rgÚ __objclass__r#)rirrrÚ_reduce_method_descriptorÒsrncCst|j|j|jpiffS)N)Ú_rebuild_partialÚfuncrÚkeywords)ÚprrrÚ_reduce_partialØsrscCstj|f|ž|ŽS)N)Ú functoolsÚpartial)rprrqrrrroÚsrocCsddlm}t||ƒffS)Nr)Ú DupSocket)rbrvÚ_rebuild_socket)rarvrrrÚ_reduce_socketãs rxcCs|jƒS)N)r<)ZdsrrrrwæsrwcCs"t|jƒƒ}t||j|j|jffS)N)rEr^rwÚfamilyrÚproto)raÚdfrrrrxës cCs|jƒ}tj||||d�S)N)r^)r<rO)r{ryrrzrerrrrwîsc@s`eZdZeZeZeZeZeZej dkr4e Z e Z e Z n e Z eZeZeZeZeZeZeZdd„ZdS)ÚAbstractReducerr cGsNtttƒjƒtƒtttjƒtƒtttj ƒtƒtt j t ƒtt j tƒdS)N)r rrkrlrjrXÚappendrnÚintÚ__add__rtrursrOrx)rrrrrr s  zAbstractReducer.__init__N)r#r$r%rr r rrÚsysÚplatformr.r-r,rFrGrErjrnrorxrwrrrrrr|ôs$ r|)Ú metaclass)N)NF)/Úabcrrr&rtrr=r(rOr€rdrÚ__all__r�ÚhasattrrcZPicklerrr r r/r-r.rrÚobjectr,rLrQrFrGrErjrkrrlrnrXr}r~rrsrorurxrwr|rrrrÚ sb         #