o w[e(%@sddlmZddlZddlZddlZddlZddlZddlZddlZddl m Z gdZ ej dkp@e edo@e edo@e ejd ZGd d d ejZejZd8d d Zej dkr~e gd7Z ddlZd9ddddZddZddZddZGdddeZn#e gd7Z ddlZej dkZddZdd Zd!dZd"dZd#d$Zd%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 dkrd/d0Z+d1d2Z,eeje+nd3d0Z+d4d2Z,eeje+Gd5d6d6ed7Z-dS):)ABCMetaN)context) send_handle recv_handleForkingPicklerregisterdumpwin32CMSG_LEN SCM_RIGHTSsendmsgcsJeZdZdZiZejZfddZe ddZ e d ddZ e j Z ZS) rz)Pickler subclass used by multiprocessing.cs*tj||j|_|j|jdSN)super__init___copyreg_dispatch_tablecopydispatch_tableupdate_extra_reducersselfargs __class__0/usr/lib/python3.10/multiprocessing/reduction.pyr&s  zForkingPickler.__init__cCs||j|<dS)z&Register a reduce function for a type.N)r)clstypereducerrrr+szForkingPickler.registerNcCs t}|||||Sr)ioBytesIOr getbuffer)robjprotocolbufrrrdumps0szForkingPickler.dumpsr)__name__ __module__ __qualname____doc__rcopyregrrr classmethodrr&pickleloads __classcell__rrrrr!s   rcCst|||dS)z3Replacement for pickle.dump() using ForkingPickler.N)rr )r#filer$rrrr :sr ) DupHandle duplicate steal_handleF)source_processcCs6t}|dur |}|dur|}t|||d|tjS)zr7r6_handler@_access_pid)rr9accesspidprocrrrrjs  zDupHandle.__init__c Cs^|jtkr |jSttjd|j}zt||jt|j dtj Wt |St |w)z1Get the handle. This should only be called once.F) rOrKrLrMr5r=r>r7r6rNr?r@)rrRrrrrJys   zDupHandle.detachr)r'r(r)r*rrJrrrrr1hs  r1)DupFdsendfdsrecvfdsdarwincCsZtd|}tt|dg}||gtjtj|fgtr)|ddkr+t ddSdS)z,Send an array of fds over an AF_UNIX socket.irAz%did not receive acknowledgement of fdN) arraybyteslenr socket SOL_SOCKETr ACKNOWLEDGErI RuntimeError)sockfdsmsgrrrrTs rTc Cstd}|j|}|dt|\}}}}|s|stz[tr%|dt|dkr3t dt||d\}} } |tj kro| tj krtt| |jdkrOt | | t|d|dkrjtdt||dt|WSWt dWt dt tfyYt dw) z/Receive an array of fds over an AF_UNIX socket.rWrrYzreceived %d items of ancdatarrXz Len is {0:n} but msg[0] is {1!r}zInvalid data received)rZitemsizerecvmsgr] CMSG_SPACEEOFErrorr_rDr\r`r^r ValueError frombytesAssertionErrorformatlist IndexError) rasizea bytes_sizercancdataflagsaddr cmsg_level cmsg_type cmsg_datarrrrUsB           rUcCsHt|tjtj}t||gWddS1swYdSrC)r]fromfdfilenoAF_UNIX SOCK_STREAMrT)rEr9rFsrrrrs"cCsHt|tjtj}t|ddWdS1swYdS)rHrrN)r]rwrxryrzrU)rEr{rrrrs $cCsBt}|dur|||Strddlm}||Std)zReturn a wrapper for an fd.Nr)resource_sharerz&SCM_RIGHTS appears not to be available)rget_spawning_popenrSduplicate_for_childHAVE_SEND_HANDLEr|rh)fd popen_objr|rrrrSs  rScCs.|jdurt|j|jjffSt|j|jjffSr)__self__getattrr__func__r'mrrr_reduce_methods rc@seZdZddZdS)_CcCsdSrr)rrrrfsz_C.fN)r'r(r)rrrrrrs rcCst|j|jffSr)r __objclass__r'rrrr_reduce_method_descriptorsrcCst|j|j|jp iffSr)_rebuild_partialfuncrkeywords)prrr_reduce_partialrcCstj|g|Ri|Sr) functoolspartial)rrrrrrrrrcCsddlm}t||ffS)Nr) DupSocket)r|r_rebuild_socket)r{rrrr_reduce_sockets rcCs|Sr)rJ)dsrrrrsrcCs"t|}t||j|j|jffSr)rSrxrfamilyrproto)r{dfrrrrs cCs|}tj||||dS)N)rx)rJr])rrrrrrrrrsc@sdeZdZdZeZeZeZeZeZe j dkre Z e Z e Z neZeZeZeZeZeZeZeZddZdS)AbstractReducerzAbstract base class for use in implementing a Reduction class suitable for use in replacing the standard reduction mechanism used in multiprocessing.r cGsNtttjttttjttttj ttt j t tt j tdSr)rrrrrrlappendrint__add__rrrr]rrrrrrs  zAbstractReducer.__init__N)r'r(r)r*rrr rrsysplatformr3r2r1rTrUrSrrrrrrrrrrrs(  r) metaclassr)NF).abcrr+rr rKr-r]rrr__all__rhasattrrPicklerrrr r5r2r3rrobjectr1rZr_rTrUrSrrrrrrlrrrrrrrrrrrrrsl             #