a DOg(%@s ddlmZddlZddlZddlZddlZddlZddlZddlZddl m Z gdZ ej dkpe edoe edoe ejd ZGd d d ejZejZd8d d Zej dkre gd7Z ddlZd9ddddZddZddZddZGdddeZnFe 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__1/usr/lib64/python3.9/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.dumps)N)__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)zr?)rrNrrrrFys    zDupHandle.detach)N)r'r(r)r*rrFrrrrr1hs r1)DupFdsendfdsrecvfdsdarwincCsVtd|}tt|dg}||gtjtj|fgtrR|ddkrRt ddS)z,Send an array of fds over an AF_UNIX socket.irAz%did not receive acknowledgement of fdN) arraybyteslenr socket SOL_SOCKETr ACKNOWLEDGErE RuntimeError)sockfdsmsgrrrrPs  rPc Cstd}|j|}|dt|\}}}}|s:|s:tztrJ|dt|dkrft dt||d\}} } |tj kr| tj krt| |jdkrt | | t|d|dkrtdt||dt|WSWnt tfyYn0t dd S) z/Receive an array of fds over an AF_UNIX socket.rSrrUzreceived %d items of ancdatarrTz Len is {0:n} but msg[0] is {1!r}zInvalid data receivedN)rVitemsizerecvmsgrY CMSG_SPACEEOFErrorr[rArXr\rZr ValueError frombytesAssertionErrorformatlist IndexError) r]sizea bytes_sizer_ancdataflagsaddr cmsg_level cmsg_type cmsg_datarrrrQs:       rQcCsFt|tjtj}t||gWdn1s80YdSr@)rYfromfdfilenoAF_UNIX SOCK_STREAMrP)rBr9rCsrrrrscCsHt|tjtj}t|ddWdS1s:0YdS)rDrrN)rYrsrtrurvrQ)rBrwrrrrscCsFt}|dur |||Str:ddlm}||StddS)zReturn a wrapper for an fd.Nr)resource_sharerz&SCM_RIGHTS appears not to be available)rget_spawning_popenrOduplicate_for_childHAVE_SEND_HANDLErxrd)fd popen_objrxrrrrOs  rOcCs2|jdurt|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|g|Ri|Sr) functoolspartial)rrrrrrrsrcCsddlm}t||ffS)Nr) DupSocket)rxr_rebuild_socket)rwrrrr_reduce_sockets rcCs|Sr)rF)ZdsrrrrsrcCs"t|}t||j|j|jffSr)rOrtrfamilyrproto)rwdfrrrrs cCs|}tj||||dS)N)rt)rFrY)rrrrr}rrrrsc@sdeZdZdZeZeZeZeZeZe j dkr8e Z e Z e Z n eZeZeZeZeZeZeZeZddZdS)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)rrrrrrhappendrint__add__rrrrYrrrrrrs  zAbstractReducer.__init__N)r'r(r)r*rrr rrsysplatformr3r2r1rPrQrOrrrrrrrrrrrs& r) metaclass)N)NF).abcrr+rr rGr-rYrr|r__all__rhasattrr{Picklerrrr r5r2r3rrobjectr1rVr[rPrQrOrrrrrrhrrrrrrrrrrrrr sj           #