<!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
 f!                 @   s   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Zddlm	Z	 ddlm
Z
 ddlmZ ddlmZ ddlmZ ddlmZ d	d
ddgZdZejdZG dd deZdddZdd Zdd Zdd Ze ZejZejZejZejZdS )    N   )
connection)process)	reduction)semaphore_tracker)spawn)utilensure_runningget_inherited_fdsconnect_to_new_processset_forkserver_preload   Qc               @   s4   e Zd Zdd Zdd Zdd Zdd Zd	d
 ZdS )
ForkServerc             C   s.   d | _ d | _d | _d | _tj | _dg| _d S )N__main__)_forkserver_address_forkserver_alive_fd_forkserver_pid_inherited_fds	threadingZLock_lock_preload_modules)self r   ?/opt/alt/python36/lib64/python3.6/multiprocessing/forkserver.py__init__!   s    
zForkServer.__init__c             C   s&   t dd | jD std|| _dS )z>Set list of module names to try to load in forkserver process.c             s   s   | ]}t |tkV  qd S )N)typestr).0modr   r   r   	<genexpr>+   s    z4ForkServer.set_forkserver_preload.<locals>.<genexpr>z&module_names must be a list of stringsN)allr   	TypeError)r   Zmodules_namesr   r   r   r   )   s    z!ForkServer.set_forkserver_preloadc             C   s   | j S )zReturn list of fds inherited from parent process.

        This returns None if the current process was not started by fork
        server.
        )r   )r   r   r   r   r
   /   s    zForkServer.get_inherited_fdsc             C   s   | j   t|d tkr tdtjtj}|j| j tj	 \}}tj	 \}}||| j
tj g}||7 }z<ytj|| ||fS    tj| tj|  Y nX W dtj| tj| X W dQ R X dS )a;  Request forkserver to create a child process.

        Returns a pair of fds (status_r, data_w).  The calling process can read
        the child process's pid and (eventually) its returncode from status_r.
        The calling process should write to data_w the pickled preparation and
        process data.
           ztoo many fdsN)r	   lenMAXFDS_TO_SEND
ValueErrorsocketAF_UNIXZconnectr   ospiper   r   Zgetfdr   Zsendfdsclose)r   fdsZclientZparent_rchild_wchild_rZparent_wZallfdsr   r   r   r   7   s&    



z!ForkServer.connect_to_new_processc                s  | j n tj  | jdk	rVtj| jtj\}}|s8dS tj| j d| _	d| _d| _d}| j
rddh tjd}t fdd|j D }ni }tjtj}tjd	}|j| tj|d
 |j  tj \}}ztyV|j |g}	||j || j
|f; }tj }
|
gtj  }|d|g7 }tj|
||	}W n   tj|  Y nX W dtj| X || _	|| _|| _W dQ R X W dQ R X dS )zMake sure that a fork server is running.

        This can be called from any process.  Note that usually a child
        process will just reuse the forkserver started by its parent, so
        ensure_running() will do nothing.
        Nz-from multiprocessing.forkserver import main; zmain(%d, %d, %r, **%r)	main_pathsys_pathignorec             3   s"   | ]\}}| kr||fV  qd S )Nr   )r   xy)desired_keysr   r   r    o   s    z,ForkServer.ensure_running.<locals>.<genexpr>r(   i  z-czCfrom multiprocessing.forkserver import main; main(%d, %d, %r, **%r))r   r   r	   r   r)   waitpidWNOHANGr+   r   r   r   r   Zget_preparation_datadictitemsr'   r(   r   Zarbitrary_addressZbindchmodZlistenr*   filenoZget_executabler   Z_args_from_interpreter_flagsZspawnv_passfds)r   pidZstatuscmddatalistenerZaddressalive_rZalive_wZfds_to_passZexeargsr   )r4   r   r	   T   sL    

 



zForkServer.ensure_runningN)__name__
__module____qualname__r   r   r
   r   r	   r   r   r   r   r      s
   r   c          4   C   s  |rhd|kr8|dk	r8dt j _ztj| W dt j `X x.|D ]&}yt| W q> tk
rb   Y q>X q>W tj  t	j
t	jt	jt	ji}dd |j D }tjtj| d,}tj }	|j t_|	j|tj |	j|tj xyxdd |	j D }
|
rP qW ||
krt|j d	 l}d
}tj d	krzFyt|||| W n. tk
rn   tjtj    tj!j"  Y nX W dtj#| X W dQ R X W q t$k
r } z|j%t%j&kr W Y dd}~X qX qW W dQ R X W dQ R X dS )zRun forkserver.r   NTc             S   s   i | ]\}}t j |||qS r   )signal)r   sigvalr   r   r   
<dictcomp>   s   zmain.<locals>.<dictcomp>)r:   c             S   s   g | ]\}}|j qS r   )Zfileobj)r   keyZeventsr   r   r   
<listcomp>   s    zmain.<locals>.<listcomp>r   r   )'r   Zcurrent_processZ_inheritingr   Zimport_main_path
__import__ImportErrorr   Z_close_stdinrD   SIGCHLDSIG_IGNSIGINTr8   r'   r(   	selectorsZDefaultSelectorZgetsockname_forkserverr   registerZ
EVENT_READZselect
SystemExitZacceptr)   fork
_serve_one	Exceptionsys
excepthookexc_infostderrflush_exitOSErrorerrnoZECONNABORTED)Zlistener_fdr?   Zpreloadr/   r0   modnamehandlersZold_handlersr>   ZselectorZrfdsscodeer   r   r   main   sR    





rc   c             C   s   |j   tj | x |j D ]\}}tj|| qW tj| td }| j   |^}}t_}	t_	|	t
j_t|tj  dtjkrdd l}
|
j  tj|}t|| d S )Nr   randomr   )r+   r)   r8   rD   r   Zrecvfdsr%   rP   r   r   r   Z_semaphore_trackerZ_fdwrite_unsignedgetpidrV   modulesrd   Zseedr   _main)r`   r>   r?   r_   rE   rF   r,   r.   r-   Zstfdrd   ra   r   r   r   rT      s    


rT   c             C   sR   d}t j}x8t||k rBtj| |t| }|s8td||7 }qW t j|d S )N    zunexpected EOFr   )UNSIGNED_STRUCTsizer$   r)   readEOFErrorZunpack)fdr=   Zlengthr`   r   r   r   read_unsigned   s    ro   c             C   s@   t j|}x0|r:tj| |}|dkr,td||d  }qW d S )Nr   zshould not get here)rj   Zpackr)   writeRuntimeError)rn   nmsgnbytesr   r   r   re      s    
re   )NN)r]   r)   rO   rD   r'   ZstructrV   r    r   r   contextr   r   r   r   __all__r%   ZStructrj   objectr   rc   rT   ro   re   rP   r	   r
   r   r   r   r   r   r   <module>   s6   
s
=!
