B -_$@sddlmZddlZddlZddlZddlZddlZddlZddlZddl m Z ddddd gZ ej d kpe ed oe ed oe ejd ZGdddejZejZd5dd Zej d kre dddg7Z ddlZd6ddZddZddZddZGdddeZnHe dddg7Z ddlZej dkZddZddZddZd 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.d/Z,eeje+nd0d-Z+d1d/Z,eeje+Gd2d3d3ed4Z-dS)7)ABCMetaN)context send_handle recv_handleForkingPicklerregisterdumpwin32ZCMSG_LEN SCM_RIGHTSsendmsgcsJeZdZdZiZejZfddZe ddZ e d ddZ e j Z ZS) rz)Pickler subclass used by multiprocessing.cs*tj||j|_|j|jdS)N)super__init___copyreg_dispatch_tablecopydispatch_tableupdate_extra_reducers)selfargs) __class__//usr/lib/python3.7/multiprocessing/reduction.pyr&s  zForkingPickler.__init__cCs||j|<dS)z&Register a reduce function for a type.N)r)clstypereducerrrr+szForkingPickler.registerNcCs t}|||||S)N)ioBytesIOr getbuffer)robjprotocolZbufrrrdumps0szForkingPickler.dumps)N)__name__ __module__ __qualname____doc__rcopyregrrr classmethodrr!pickleloads __classcell__rr)rrr!s   cCst|||dS)z3Replacement for pickle.dump() using ForkingPickler.N)rr )rfiler rrrr :s DupHandle duplicate steal_handleFcCs*|dkrt}tt||d|tjS)zr?r/r4r5r1r0r@r6r7)rrDrrrr<us  zDupHandle.detach)N)r"r#r$r%rr<rrrrr,ds 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 ACKNOWLEDGEr; RuntimeError)sockZfdsmsgrrrrFs  c Cstd}|j|}|dt|\}}}}|s:|s:tytrJ|dt|dkrft dt||d\}} } |tj kr| tj krt| |jdkrt | | t|d|dkrtdt||dt|SWnt tfk rYnXt dd S) z/Receive an array of fds over an AF_UNIX socket.rIrrKzreceived %d items of ancdatarrJz Len is {0:n} but msg[0] is {1!r}zInvalid data receivedN)rLitemsizeZrecvmsgrOZ CMSG_SPACEEOFErrorrQr8rNrRrPr ValueErrorZ frombytesAssertionErrorformatlist IndexError) rSsizeaZ bytes_sizerTZancdataflagsZaddrZ cmsg_levelZ cmsg_typeZ cmsg_datarrrrGs2         c Cs2t|tjtj}t||gWdQRXdS)z&Send a handle over a local connection.N)rOfromfdfilenoAF_UNIX SOCK_STREAMrF)r9r3r:srrrrsc Cs0t|tjtj}t|ddSQRXdS)z)Receive a handle over a local connection.rrN)rOr_r`rarbrG)r9rcrrrrscCsFt}|dk r |||Str:ddlm}||StddS)zReturn a wrapper for an fd.Nr)resource_sharerz&SCM_RIGHTS appears not to be available)rZget_spawning_popenrEZduplicate_for_childHAVE_SEND_HANDLErdrW)fdZ popen_objrdrrrrEs  cCs2|jdkrt|j|jjffSt|j|jjffSdS)N)__self__getattrr__func__r")mrrr_reduce_methods rlc@seZdZddZdS)_CcCsdS)Nr)rrrrfsz_C.fN)r"r#r$rnrrrrrmsrmcCst|j|jffS)N)ri __objclass__r")rkrrr_reduce_method_descriptorsrpcCst|j|j|jpiffS)N)_rebuild_partialfuncrkeywords)prrr_reduce_partialsrucCstj|f||S)N) functoolspartial)rrrrsrrrrqsrqcCsddlm}t||ffS)Nr) DupSocket)rdrx_rebuild_socket)rcrxrrr_reduce_sockets rzcCs|S)N)r<)ZdsrrrrysrycCs"t|}t||j|j|jffS)N)rEr`ryfamilyrproto)rcdfrrrrzs cCs|}tj||||dS)N)r`)r<rO)r}r{rr|rgrrrrysc@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 tdS)N)rrrmrnrlrZappendrpint__add__rvrwrurOrz)rrrrrrs  zAbstractReducer.__init__N)r"r#r$r%rrr rrsysplatformr.r-r,rFrGrErlrprqrzryrrrrrr~s& r~) metaclass)N)NF).abcrr&rvrr=r(rOrrfr__all__rhasattrreZPicklerrrr r/r-r.rrobjectr,rLrQrFrGrErlrmrrnrprZrrrrurqrwrzryr~rrrr sb          #