
Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­
<!DOCTYPE html>
<html>
U
    ¡ê,a(%  ã                   @   s  d dl mZ d dlZd dlZd dlZd dlZd dlZd dlZd dlZddl	m
Z
 ddddd	gZejd
kp†eedƒo†eedƒo†eejdƒZG dd„ dejƒZejZd6dd	„Zejd
k�redddg7 Zd dlZd7ddœdd„Zdd„ Zdd„ Zdd„ ZG dd„ deƒZnHedddg7 Zd dlZejdkZdd„ Zdd„ Zd d„ Zd!d„ Zd"d„ Zd#d$„ ZG d%d&„ d&ƒZ ee!e ƒ j"ƒeƒ d'd(„ Z#ee!e$j%ƒe#ƒ ee!e&j'ƒe#ƒ d)d*„ Z(d+d,„ Z)eej*e(ƒ ejd
k�räd-d.„ Z+d/d0„ Z,eeje+ƒ nd1d.„ Z+d2d0„ Z,eeje+ƒ G d3d4„ d4ed5�Z-dS )8é    )ÚABCMetaNé   )ÚcontextÚsend_handleÚrecv_handleÚForkingPicklerÚregisterÚdumpÚwin32ZCMSG_LENÚ
SCM_RIGHTSÚsendmsgc                       sF   e Zd Zi ZejZ‡ fdd„Zedd„ ƒZ	eddd„ƒZ
ejZ‡  ZS )	r   c                    s*   t ƒ j|Ž  | j ¡ | _| j | j¡ d S ©N)ÚsuperÚ__init__Ú_copyreg_dispatch_tableÚcopyÚdispatch_tableÚupdateÚ_extra_reducers©ÚselfÚargs©Ú	__class__© ú>/opt/alt/python38/lib64/python3.8/multiprocessing/reduction.pyr   &   s    zForkingPickler.__init__c                 C   s   || j |< d S r   )r   )ÚclsÚtypeÚreducer   r   r   r   +   s    zForkingPickler.registerNc                 C   s    t  ¡ }| ||ƒ |¡ | ¡ S r   )ÚioÚBytesIOr	   Ú	getbuffer)r   ÚobjÚprotocolZbufr   r   r   Údumps0   s    zForkingPickler.dumps)N)Ú__name__Ú
__module__Ú__qualname__r   Úcopyregr   r   r   Úclassmethodr   r$   ÚpickleÚloadsÚ__classcell__r   r   r   r   r   !   s   
c                 C   s   t ||ƒ | ¡ d S r   )r   r	   )r"   Úfiler#   r   r   r   r	   :   s    Ú	DupHandleÚ	duplicateÚsteal_handleF)Úsource_processc                C   s6   t  ¡ }|d kr|}|d kr |}t  || |d|t j¡S )Nr   )Ú_winapiÚGetCurrentProcessÚDuplicateHandleÚDUPLICATE_SAME_ACCESS)ÚhandleZtarget_processZinheritabler1   Zcurrent_processr   r   r   r/   G   s        þc              	   C   sF   t  t jd| ¡}z$t  ||t  ¡ ddt jt jB ¡W ¢S t  |¡ X d S ©NFr   )r2   ÚOpenProcessÚPROCESS_DUP_HANDLEÚCloseHandler4   r3   r5   ÚDUPLICATE_CLOSE_SOURCE)Z
source_pidr6   Zsource_process_handler   r   r   r0   S   s      ÿ   
ýc                 C   s   t |tj|ƒ}|  |¡ d S r   )r.   r2   r5   Úsend)Úconnr6   Údestination_pidZdhr   r   r   r   _   s    c                 C   s   |   ¡  ¡ S r   )ÚrecvÚdetach)r=   r   r   r   r   d   s    c                   @   s   e Zd Zddd„Zdd„ ZdS )r.   Nc              	   C   s\   |d krt  ¡ }t tjd|¡}zt t ¡ |||dd¡| _W 5 t |¡ X || _	|| _
d S r7   )ÚosÚgetpidr2   r8   r9   r:   r4   r3   Ú_handleÚ_accessÚ_pid)r   r6   ÚaccessÚpidÚprocr   r   r   r   j   s        þ
zDupHandle.__init__c              	   C   sZ   | j t ¡ kr| jS t tjd| j ¡}z"t || jt 	¡ | j
dtj¡W ¢S t |¡ X d S )NF)rE   rA   rB   rC   r2   r8   r9   r:   r4   r3   rD   r;   )r   rH   r   r   r   r@   y   s    
ÿ    þzDupHandle.detach)N)r%   r&   r'   r   r@   r   r   r   r   r.   h   s   
ÚDupFdÚsendfdsÚrecvfdsÚdarwinc                 C   sV   t   d|¡}tt|ƒd gƒ}|  |gtjtj|fg¡ trR|  d¡dkrRt	dƒ‚d S )NÚié   r   ó   Az%did not receive acknowledgement of fd)
ÚarrayÚbytesÚlenr   ÚsocketÚ
SOL_SOCKETr   ÚACKNOWLEDGEr?   ÚRuntimeError)ÚsockZfdsÚmsgr   r   r   rJ   ‘   s
    c              	   C   s  t   d¡}|j| }|  dt |¡¡\}}}}|s:|s:t‚z¦trJ|  d¡ t|ƒdkrft	dt|ƒ ƒ‚|d \}}	}
|tj
krÞ|	tjkrÞt|
ƒ|j dkržt‚| |
¡ t|ƒd |d krÔtd t|ƒ|d ¡ƒ‚t|ƒW S W n ttfk
rø   Y nX t	dƒ‚d S )	NrM   r   rO   zreceived %d items of ancdatar   rN   z Len is {0:n} but msg[0] is {1!r}zInvalid data received)rP   ÚitemsizeZrecvmsgrS   Z
CMSG_SPACEÚEOFErrorrU   r<   rR   rV   rT   r   Ú
ValueErrorZ	frombytesÚAssertionErrorÚformatÚlistÚ
IndexError)rW   ÚsizeÚaZ
bytes_sizerX   ZancdataÚflagsZaddrZ
cmsg_levelZ	cmsg_typeZ	cmsg_datar   r   r   rK   ™   s<    


ÿ
ÿ
 ÿÿc              	   C   s2   t  |  ¡ t jt j¡�}t||gƒ W 5 Q R X d S r   )rS   ÚfromfdÚfilenoÚAF_UNIXÚSOCK_STREAMrJ   )r=   r6   r>   Úsr   r   r   r   µ   s    c              
   C   s<   t  |  ¡ t jt j¡�}t|dƒd W  5 Q R £ S Q R X d S )Nr   r   )rS   rc   rd   re   rf   rK   )r=   rg   r   r   r   r   º   s    c                 C   sF   t  ¡ }|d k	r | | | ¡¡S tr:ddlm} | | ¡S tdƒ‚d S )Nr   )Úresource_sharerz&SCM_RIGHTS appears not to be available)r   Zget_spawning_popenrI   Zduplicate_for_childÚHAVE_SEND_HANDLEÚ rh   r[   )ÚfdZ	popen_objrh   r   r   r   rI   ¿   s    
c                 C   s2   | j d krt| j| jjffS t| j | jjffS d S r   )Ú__self__Úgetattrr   Ú__func__r%   ©Úmr   r   r   Ú_reduce_methodÎ   s    
rq   c                   @   s   e Zd Zdd„ ZdS )Ú_Cc                 C   s   d S r   r   )r   r   r   r   ÚfÔ   s    z_C.fN)r%   r&   r'   rs   r   r   r   r   rr   Ó   s   rr   c                 C   s   t | j| jffS r   )rm   Ú__objclass__r%   ro   r   r   r   Ú_reduce_method_descriptorÙ   s    ru   c                 C   s   t | j| j| jpi ffS r   )Ú_rebuild_partialÚfuncr   Úkeywords)Úpr   r   r   Ú_reduce_partialß   s    rz   c                 C   s   t j| f|ž|ŽS r   )Ú	functoolsÚpartial)rw   r   rx   r   r   r   rv   á   s    rv   c                 C   s   ddl m} t|| ƒffS )Nr   )Ú	DupSocket)rh   r}   Ú_rebuild_socket)rg   r}   r   r   r   Ú_reduce_socketê   s    r   c                 C   s   |   ¡ S r   )r@   )Zdsr   r   r   r~   í   s    r~   c                 C   s"   t |  ¡ ƒ}t|| j| j| jffS r   )rI   rd   r~   Úfamilyr   Úproto)rg   Údfr   r   r   r   ò   s    c                 C   s   |   ¡ }tj||||d�S )N)rd   )r@   rS   )r‚   r€   r   r�   rk   r   r   r   r~   õ   s    c                   @   s`   e Zd ZeZeZeZeZeZej	dkr4e
Z
eZeZneZeZeZeZeZeZeZeZdd„ ZdS )ÚAbstractReducerr
   c                 G   sN   t ttƒ jƒtƒ t ttjƒtƒ t ttj	ƒtƒ t t
jtƒ t tjtƒ d S r   )r   r   rr   rs   rq   r^   Úappendru   ÚintÚ__add__r{   r|   rz   rS   r   r   r   r   r   r     s
    zAbstractReducer.__init__N)r%   r&   r'   r   r   r	   r   r   ÚsysÚplatformr0   r/   r.   rJ   rK   rI   rq   ru   rv   r   r~   r   r   r   r   r   rƒ   û   s$   
rƒ   )Ú	metaclass)N)NF).Úabcr   r(   r{   r   rA   r*   rS   r‡   rj   r   Ú__all__rˆ   Úhasattrri   ZPicklerr   r   r	   r2   r/   r0   r   r   Úobjectr.   rP   rU   rJ   rK   rI   rq   rr   r   rs   ru   r^   r„   r…   r†   rz   rv   r|   r   r~   rƒ   r   r   r   r   Ú<module>
   sj   

ÿ
ý	
ÿ#
