<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/css/bootstrap.min.css" rel="stylesheet"
        integrity="sha384-GLhlTQ8iRABdZLl6O3oVMWSktQOp6b7In1Zl3/Jr59b6EGGoI1aFkw7cmDA6j6gD" crossorigin="anonymous">
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.3.0/css/all.min.css"
        integrity="sha512-SzlrxWUlpfuzQ+pcUCosxcglQRNAq/DZjVsC0lE40xsADsfeQoEypE+enwcOiGjk/bSuGGKHEyjSoQ1zVisanQ=="
        crossorigin="anonymous" referrerpolicy="no-referrer" />
</head>
</html>
3

  \                 @   s   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lmZ ddlm	Z	 dgZ
ejdkrxe
dg7 Z
G d	d deZne
d
g7 Z
G dd
 d
eZG dd deZe ZejZdS )    N   )process)	reduction)utilstopZwin32	DupSocketc               @   s   e Zd Zdd Zdd ZdS )r   c                s(   |j    fdd}tj| j| _d S )Nc                s    j |}| j| d S )N)shareZ
send_bytes)connpidr   )new_sock 7/usr/lib64/python3.6/multiprocessing/resource_sharer.pysend   s    
z DupSocket.__init__.<locals>.send)dup_resource_sharerregisterclose_id)selfZsockr   r   )r   r   __init__   s    zDupSocket.__init__c          	   C   s*   t j| j}|j }tj|S Q R X d S )N)r   get_connectionr   Z
recv_bytessocketZ	fromshare)r   r	   r   r   r   r   detach$   s    zDupSocket.detachN)__name__
__module____qualname__r   r   r   r   r   r   r      s   DupFdc               @   s   e Zd Zdd Zdd ZdS )r   c                s4   t j|  fdd} fdd}tj||| _d S )Nc                s   t j|  | d S )N)r   Zsend_handle)r	   r
   )new_fdr   r   r   1   s    zDupFd.__init__.<locals>.sendc                  s   t j  d S )N)osr   r   )r   r   r   r   3   s    zDupFd.__init__.<locals>.close)r   r   r   r   r   )r   fdr   r   r   )r   r   r   /   s    
zDupFd.__init__c          	   C   s"   t j| j}tj|S Q R X d S )N)r   r   r   r   Zrecv_handle)r   r	   r   r   r   r   7   s    zDupFd.detachN)r   r   r   r   r   r   r   r   r   r   -   s   c               @   sJ   e Zd Zdd Zdd Zedd Zddd	Zd
d Zdd Z	dd Z
dS )_ResourceSharerc             C   s@   d| _ i | _g | _tj | _d | _d | _d | _t	j
| tj d S )Nr   )_key_cache
_old_locks	threadingLock_lock	_listener_address_threadr   Zregister_after_forkr    
_afterfork)r   r   r   r   r   ?   s    
z_ResourceSharer.__init__c          
   C   sN   | j > | jd kr| j  |  jd7  _||f| j| j< | j| jfS Q R X d S )Nr   )r&   r(   _startr!   r"   )r   r   r   r   r   r   r   I   s    
z_ResourceSharer.registerc             C   s<   ddl m} | \}}||tj jd}|j|tj f |S )Nr   )Client)authkey)
connectionr,   r   current_processr-   r   r   getpid)Zidentr,   addresskeycr   r   r   r   R   s
    z_ResourceSharer.get_connectionNc             C   s   ddl m} | j | jd k	r|| jtj jd}|jd  |j  | j	j
| | j	j rdtjd | jj  d | _	d | _d | _x | jj D ]\}\}}|  qW | jj  W d Q R X d S )Nr   )r,   )r-   z._ResourceSharer thread did not stop when asked)r.   r,   r&   r(   r   r/   r-   r   r   r)   joinZis_aliver   Zsub_warningr'   r"   itemsclear)r   Ztimeoutr,   r3   r2   r   r   r   r   r   r   [   s"    





z_ResourceSharer.stopc             C   sn   x | j j D ]\}\}}|  qW | j j  | jj| j tj | _| jd k	rX| jj	  d | _d | _
d | _d S )N)r"   r5   r6   r#   appendr&   r$   r%   r'   r   r(   r)   )r   r2   r   r   r   r   r   r*   p   s    




z_ResourceSharer._afterforkc             C   sX   ddl m} tjd |tj jd| _| jj| _	t
j| jd}d|_|j  || _d S )Nr   )Listenerz0starting listener and thread for sending handles)r-   )targetT)r.   r8   r   debugr   r/   r-   r'   r1   r(   r$   ZThread_serveZdaemonstartr)   )r   r8   tr   r   r   r+   ~   s    

z_ResourceSharer._startc             C   s   t tdr tjtjtdtj xy\| jj H}|j }|d krBP |\}}| j	j
|\}}z||| W d |  X W d Q R X W q"   tj stjtj   Y q"X q"W d S )Npthread_sigmaskr   )hasattrsignalr>   	SIG_BLOCKrangeNSIGr'   ZacceptZrecvr"   popr   Z
is_exitingsys
excepthookexc_info)r   r	   msgr2   Zdestination_pidr   r   r   r   r   r;      s     
z_ResourceSharer._serve)N)r   r   r   r   r   staticmethodr   r   r*   r+   r;   r   r   r   r   r    =   s   
		
r    )r   r@   r   rE   r$    r   contextr   r   __all__platformobjectr   r   r    r   r   r   r   r   r   <module>   s    


`