£Á°èZ¨Ä…–K§‚«“ô4“ÒÙ´dîfUÙÃÅ WKbyÊ¦•êŽ…È®FÒ¿ÊÎóCozá¬S@6{Í:›œêZÌ:Š•_%:¢¾¾~;‘Ã~èŠ©ÊÇí`ÔÑ©úë™µ'5I¿fš×WO%ø9¾«¾DK|€ùÍD”Ýs]nHÕ¶ê×Ó¼ãžªéUWŸÈË%DÒÕ¬ï‘]/Åcx  ‰ï2ß]ä6G[]S£ÔÏ¯rs{úëóµmÒï#UQxo·õÞCe]"±/aÙ&Eã4ú9Jé_ÞåëdãöKë)AÞ                  ¯¹ægƒÛowÐø^d™ý½ßB7áyMä9ÜÖUã
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
<html>
a
    XC?hn/                     @   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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 g d	Zd
Ze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)resource_tracker)spawn)util)ensure_runningget_inherited_fdsconnect_to_new_processset_forkserver_preload   qc                   @   sD   e Zd Zdd Zd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 | _dg| _d S )N__main__)_forkserver_address_forkserver_alive_fd_forkserver_pid_inherited_fds	threadingZLock_lock_preload_modulesself r   ?/opt/alt/python39/lib64/python3.9/multiprocessing/forkserver.py__init__"   s    
zForkServer.__init__c                 C   s2   | j  |   W d    n1 s$0    Y  d S N)r   _stop_unlockedr   r   r   r   _stop*   s    zForkServer._stopc                 C   sV   | j d u rd S t| j d | _t| j d d | _ t| jsLt| j d | _d S )Nr   )	r   oscloser   waitpidr   is_abstract_socket_namespacer   unlinkr   r   r   r   r   /   s    
zForkServer._stop_unlockedc                 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u V  qd S r   )typestr).0modr   r   r   	<genexpr>@       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
   D   s    zForkServer.get_inherited_fdsc              
   C   s  |    t|d tkr tdttj}|| j t	 \}}t	 \}}||| j
t g}||7 }zvz:t|| ||fW W t| t| W  d   S    t| t|  Y n0 W t| t| nt| t| 0 W d   n1 s0    Y  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   r    piper   r   Zgetfdr   Zsendfdsr!   )r   fdsZclientZparent_rchild_wchild_rZparent_wZallfdsr   r   r   r   L   s2    







z!ForkServer.connect_to_new_processc                    s  | j  t  | jdurbt| jtj\}}|sDW d   dS t| j d| _	d| _d| _d}| j
rddh td} fdd| D }ni }ttj}td}|| t|st|d	 |  t \}}z~zV| |g}	|| || j
|f; }t }
|
gt  }|d
|g7 }t|
||	}W n   t|  Y n0 W t| nt| 0 || _	|| _|| _W d   n1 s0    Y  W d   n1 s0    Y  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.
        NzCfrom multiprocessing.forkserver import main; main(%d, %d, %r, **%r)	main_pathsys_pathignorec                    s   i | ]\}}| v r||qS r   r   )r'   xyZdesired_keysr   r   
<dictcomp>   r*   z-ForkServer.ensure_running.<locals>.<dictcomp>r2   i  z-c)r   r   r	   r   r    r"   WNOHANGr!   r   r   r   r   Zget_preparation_dataitemsr1   r2   r   Zarbitrary_addressZbindr   r#   chmodZlistenr3   filenoZget_executableZ_args_from_interpreter_flagsZspawnv_passfds)r   pidZstatuscmddatalistenerZaddressalive_rZalive_wZfds_to_passZexeargsr   r<   r   r	   i   sN    







zForkServer.ensure_runningN)
__name__
__module____qualname__r   r   r   r   r
   r   r	   r   r   r   r   r       s   r   c                 C   s  |rjd|v r@|dur@dt  _zt| W t  `n
t  `0 |D ]$}zt| W qD tyf   Y qD0 qDt  t	
 \}}t	|d t	|d dd }tj|tjtji}	dd |	 D }
t| i }tjtj| d	}t }| t_||tj ||tj ||tj zPd
d | D }|r(qHq(||v rVt||v rt	|d zt	dt	j\}}W n t y   Y qY n0 |dkrq|!|d}|durt	"|}zt#|| W n t$y   Y n0 t	%| nt&'d|  ql||v rt|( d <}t)*|t+d }t,|t+krXt-d.t,||^}}}|%  t	/ }|dkrd}zxz<|%  |%  ||||g}|0|1  t2||||
}W n, t3y   t4j5t46   t4j78  Y n0 W t	9| nt	9| 0 nLzt#|| W n t$y*   Y n0 |||< t	%| |D ]}t	%| qBW d   n1 sj0    Y  W n6 t:y } z|j;t;j<kr W Y d}~n
d}~0 0 q$W d   n1 s0    Y  W d   n1 s0    Y  dS )zRun forkserver.r   NTFc                  W   s   d S r   r   )Z_unusedr   r   r   sigchld_handler   s    zmain.<locals>.sigchld_handlerc                 S   s   i | ]\}}|t  ||qS r   )signal)r'   sigvalr   r   r   r=      s   zmain.<locals>.<dictcomp>)rA   c                 S   s   g | ]\}}|j qS r   )Zfileobj)r'   keyZeventsr   r   r   
<listcomp>   r*   zmain.<locals>.<listcomp>i   r   z.forkserver: waitpid returned unexpected pid %dr   zToo many ({0:n}) fds to send)=r   Zcurrent_processZ_inheritingr   Zimport_main_path
__import__ImportErrorr   Z_close_stdinr    r3   set_blockingrL   SIGCHLDSIGINTSIG_IGNr?   set_wakeup_fdr1   r2   	selectorsZDefaultSelectorZgetsockname_forkserverr   registerZ
EVENT_READZselect
SystemExitreadr"   r>   ChildProcessErrorpopwaitstatus_to_exitcodewrite_signedBrokenPipeErrorr!   warningswarnZacceptr   Zrecvfdsr/   r.   RuntimeErrorformatforkextendvalues
_serve_one	Exceptionsys
excepthookexc_infostderrflush_exitOSErrorerrnoZECONNABORTED)Zlistener_fdrF   Zpreloadr7   r8   modnameZsig_rZsig_wrK   handlersZold_handlersZ	pid_to_fdrE   ZselectorZrfdsrB   stsr5   
returncodesr4   r6   code
unused_fdsfder   r   r   main   s    












2r}   c           	      C   sh   t d | D ]\}}t  || q|D ]}t| q,|^t_tj_	t_
t| }t| |}|S )NrQ   )rL   rX   r?   r    r!   rZ   r   r   Z_resource_trackerZ_fdr   dupr   Z_main)	r6   r4   rz   ru   rM   rN   r{   Zparent_sentinelry   r   r   r   rj   +  s    

rj   c                 C   sN   d}t j}t||k r@t| |t| }|s6td||7 }q
t |d S )Nr*   zunexpected EOFr   )SIGNED_STRUCTsizer.   r    r]   EOFErrorZunpack)r{   rD   Zlengthrx   r   r   r   read_signedB  s    
r   c                 C   s<   t |}|r8t| |}|dkr*td||d  }q
d S )Nr   zshould not get here)r   Zpackr    writere   )r{   nmsgnbytesr   r   r   ra   L  s    
ra   )NN) rs   r    rY   rL   r1   Zstructrl   r   rc    r   r   contextr   r   r   r   __all__r/   ZStructr   objectr   r}   rj   r   ra   rZ   r	   r
   r   r   r   r   r   r   <module>   s:   
 
 
