U :e(%@sddlmZddlZddlZddlZddlZddlZddlZddlZddl m Z ddddd gZ ej d kpe ed oe ed oe ejd ZGdddejZejZd6dd Zej d kre dddg7Z ddlZd7ddddZddZddZddZGdddeZnHe dddg7Z ddlZej dkZddZddZd dZd!dZd"dZd#d$ZGd%d&d&Z ee!e j"ed'd(Z#ee!e$j%e#ee!e&j'e#d)d*Z(d+d,Z)eej*e(ej d krd-d.Z+d/d0Z,eeje+nd1d.Z+d2d0Z,eeje+Gd3d4d4ed5Z-dS)8)ABCMetaN)context send_handle recv_handleForkingPicklerregisterdumpwin32CMSG_LEN SCM_RIGHTSsendmsgcsFeZdZiZejZfddZeddZ edddZ e j Z Z S) rcs*tj||j|_|j|jdSN)super__init___copyreg_dispatch_tablecopydispatch_tableupdate_extra_reducersselfargs __class__>/usr/local/python38/lib/python3.8/multiprocessing/reduction.pyr&s  zForkingPickler.__init__cCs||j|<dSr)r)clstypereducerrrr+szForkingPickler.registerNcCs t}|||||Sr)ioBytesIOr getbuffer)robjprotocolbufrrrdumps0szForkingPickler.dumps)N)__name__ __module__ __qualname__rcopyregrrr classmethodrr&pickleloads __classcell__rrrrr!s   cCst|||dSr)rr )r#filer$rrrr :s DupHandle duplicate steal_handleF)source_processcCs6t}|dkr|}|dkr |}t|||d|tjS)Nr)_winapiGetCurrentProcessDuplicateHandleDUPLICATE_SAME_ACCESS)handleZtarget_process inheritabler3current_processrrrr1Gsc CsFttjd|}z$t||tddtjtjBWSt|XdSNFr)r4 OpenProcessPROCESS_DUP_HANDLE CloseHandler6r5r7DUPLICATE_CLOSE_SOURCE)Z source_pidr8Zsource_process_handlerrrr2Ss cCst|tj|}||dSr)r0r4r7send)connr8destination_pidZdhrrrr_scCs |Sr)recvdetach)rArrrrdsc@seZdZdddZddZdS)r0Nc Cs\|dkrt}ttjd|}ztt|||dd|_W5t|X||_ ||_ dSr;) osgetpidr4r<r=r>r6r5_handle_access_pid)rr8accesspidprocrrrrjs  zDupHandle.__init__c CsZ|jtkr|jSttjd|j}z"t||jt |j dtj WSt|XdS)NF) rIrErFrGr4r<r=r>r6r5rHr?)rrLrrrrDys zDupHandle.detach)N)r'r(r)rrDrrrrr0hs DupFdsendfdsrecvfdsdarwincCsVtd|}tt|dg}||gtjtj|fgtrR|ddkrRt ddS)NirAz%did not receive acknowledgement of fd) arraybyteslenr socket SOL_SOCKETr ACKNOWLEDGErC RuntimeError)sockfdsmsgrrrrNs  c Cstd}|j|}|dt|\}}}}|s:|s:tztrJ|dt|dkrft dt||d\}} } |tj kr| tj krt| |jdkrt | | t|d|dkrtdt||dt|WSWnt tfk rYnXt ddS) NrQrrSzreceived %d items of ancdatarrRz Len is {0:n} but msg[0] is {1!r}zInvalid data received)rTitemsizerecvmsgrW CMSG_SPACEEOFErrorrYr@rVrZrXr ValueError frombytesAssertionErrorformatlist IndexError) r[sizea bytes_sizer]ancdataflagsaddr cmsg_level cmsg_type cmsg_datarrrrOs<      c Cs2t|tjtj}t||gW5QRXdSr)rWfromfdfilenoAF_UNIX SOCK_STREAMrN)rAr8rBsrrrrsc Cs<t|tjtj}t|ddW5QRSQRXdS)Nrr)rWrqrrrsrtrO)rArurrrrscCsFt}|dk r |||Str:ddlm}||StddS)Nr)resource_sharerz&SCM_RIGHTS appears not to be available)rget_spawning_popenrMduplicate_for_childHAVE_SEND_HANDLErvrb)fd popen_objrvrrrrMs  cCs2|jdkrt|j|jjffSt|j|jjffSdSr)__self__getattrr__func__r'mrrr_reduce_methods rc@seZdZddZdS)_CcCsdSrr)rrrrfsz_C.fN)r'r(r)rrrrrrsrcCst|j|jffSr)r~ __objclass__r'rrrr_reduce_method_descriptorsrcCst|j|j|jpiffSr)_rebuild_partialfuncrkeywords)prrr_reduce_partialsrcCstj|f||Sr) functoolspartial)rrrrrrrsrcCsddlm}t||ffS)Nr) DupSocket)rvr_rebuild_socket)rurrrr_reduce_sockets rcCs|Sr)rD)ZdsrrrrsrcCs"t|}t||j|j|jffSr)rMrrrfamilyrproto)rudfrrrrs cCs|}tj||||dS)N)rr)rDrW)rrrrr{rrrrsc@s`eZdZeZeZeZeZeZej dkr4e Z e Z e Z n e Z eZeZeZeZeZeZeZddZdS)AbstractReducerr cGsNtttjttttjttttj ttt j t tt j tdSr)rrrrrrfappendrint__add__rrrrWrrrrrrs  zAbstractReducer.__init__N)r'r(r)rrr rrsysplatformr2r1r0rNrOrMrrrrrrrrrrrs$ r) metaclass)N)NF).abcrr*rr rEr,rWrrzr__all__rhasattrryPicklerrrr r4r1r2rrobjectr0rTrYrNrOrMrrrrrrfrrrrrrrrrrrrr sj          #