/ lib / multiprocessing / forkserver.pyc
forkserver.pyc
 1  o

 2  5�Hc�0�@s�ddlZddlZddlZddlZddlZddlZddlZddlZddlZddl	m
 3  Z
 4  ddl	mZddlm
Z
ddl	mZddl	mZddl	mZgd	�Zd
 5  Ze�d�ZGdd
�d
e�Zddd�Zdd�Zdd�Zdd�Ze�ZejZejZejZejZdS)�N�)�
 6  connection)�process)�	reduction)�resource_tracker)�spawn)�util)�ensure_running�get_inherited_fds�connect_to_new_process�set_forkserver_preload��qc@sDeZdZdd�Zdd�Zdd�Zdd�Zd	d
 7  �Zdd�Zd
d�Z	dS)�
 8  ForkServercCs.d|_d|_d|_d|_t��|_dg|_dS)N�__main__)�_forkserver_address�_forkserver_alive_fd�_forkserver_pid�_inherited_fds�	threading�Lock�_lock�_preload_modules��self�r��C:\Program Files\WindowsApps\PythonSoftwareFoundation.Python.3.10_3.10.2800.0_x64__qbz5n2kfra8p0\lib\multiprocessing\forkserver.py�__init__"s
 9  zForkServer.__init__cCs4|j�
|��Wd�dS1swYdS�N)r�_stop_unlockedrrrr�_stop*s
10  "�zForkServer._stopcCsV|jdurdSt�|j�d|_t�|jd�d|_t�|j�s&t�|j�d|_dS)Nr)	r�os�closer�waitpidr�is_abstract_socket_namespacer�unlinkrrrrr/s
11  
12  zForkServer._stop_unlockedcCs&tdd�|jD��std��||_dS)z>Set list of module names to try to load in forkserver process.css�|]	}t|�tuVqdSr)�type�str)�.0�modrrr�	<genexpr>@s�z4ForkServer.set_forkserver_preload.<locals>.<genexpr>z&module_names must be a list of stringsN)�allr�	TypeError)rZ
modules_namesrrrr>s
13  z!ForkServer.set_forkserver_preloadcCs|jS)z�Return list of fds inherited from parent process.
14  
15          This returns None if the current process was not started by fork
16          server.
17          )rrrrrr
18  DszForkServer.get_inherited_fdsc
19  Cs�|��t|�dtkrtd��t�tj��X}|�|j�t�	�\}}t�	�\}}|||j
20  t��g}||7}z,zt
�||�||fWWt�|�t�|�Wd�St�|�t�|��t�|�t�|�w1sqwYdS)a;Request forkserver to create a child process.
21  
22          Returns a pair of fds (status_r, data_w).  The calling process can read
23          the child process's pid and (eventually) its returncode from status_r.
24          The calling process should write to data_w the pickled preparation and
25          process data.
26          �ztoo many fdsN)r	�len�MAXFDS_TO_SEND�
27  ValueError�socket�AF_UNIX�connectrr!�piperr�getfdr�sendfdsr")r�fds�client�parent_r�child_w�child_r�parent_wZallfdsrrrrLs0�
28  
29  
30  �
31  
32  
33  
34  �z!ForkServer.connect_to_new_processcs�|j��t��|jdur1t�|jtj�\}}|s"	Wd�dSt�|j�d|_	d|_d|_d}|j
35  rKddh�t�d�}�fdd�|�
�D�}ni}t�tj��s}t�d�}|�|�t�|�sit�|d	�|��t��\}}z<z+|��|g}	||��||j
36  |f;}t��}
37  |
38  gt��}|d
39  |g7}t�|
40  ||	�}Wn	t�|��Wt�|�nt�|�w||_	||_||_Wd�n1s�wYWd�dSWd�dS1s�wYdS)z�Make sure that a fork server is running.
41  
42          This can be called from any process.  Note that usually a child
43          process will just reuse the forkserver started by its parent, so
44          ensure_running() will do nothing.
45          NzCfrom multiprocessing.forkserver import main; main(%d, %d, %r, **%r)�	main_path�sys_path�ignorecsi|]\}}|�vr||�qSrr)r(�x�y�Zdesired_keysrr�
46  <dictcomp>�sz-ForkServer.ensure_running.<locals>.<dictcomp>r2i�z-c)rrr	rr!r#�WNOHANGr"rrrr�get_preparation_data�itemsr1r2r�arbitrary_address�bindrr$�chmod�listenr4�fileno�get_executable�_args_from_interpreter_flags�spawnv_passfds)r�pid�status�cmd�data�listener�address�alive_rZalive_w�fds_to_pass�exe�argsrrBrr	isZ
47  �	
48  
49  
50  
51  �
52  ���"�zForkServer.ensure_runningN)
53  �__name__�
54  __module__�__qualname__rr rrr
55  rr	rrrrr srcCs�|r4d|vr |dur dt��_zt�|�Wt��`nt��`w|D]}zt|�Wq"ty3Yq"wt��t	�
56  �\}}t	�|d�t	�|d�dd�}tj
|tjtji}	dd�|	��D�}
57  t�|�i}tjtj|d	���y}t����b}
|��t_|
�|tj�|
�|tj�|
�|tj�	�z(	d
58  d�|
��D�}|r�nq�||vr�t	�|d�d
ks�Jd��t�||v�r	t	�|d�	zt	�dt	j�\}}Wn	t y�Yn5w|dkr�n/|�!|d�}|du�rt	�"|�}zt#||�Wn	t$y�Ynwt	�%|�nt&�'d|�q�||v�r�|�(�d��}t)�*|t+d�}t,|�t+k�r-t-d�.t,|����|^}}}|�%�t	�/�}|dk�r�d}z<z|�%�|
�%�||||g}|�0|�1��t2||||
59  �}Wnt3�yvt4j5t4�6��t4j7�8�YnwWt	�9|�n,t	�9|�wzt#||�Wn
60  t$�y�Ynw|||<t	�%|�|D]}t	�%|��q�Wd�n	1�s�wYWnt:�y�}z|j;t;j<k�r̂WYd}~nd}~wwq�1�s�wYWd�dS1�s�wYdS)zRun forkserver.rNTFcWsdSrr)Z_unusedrrr�sigchld_handler�szmain.<locals>.sigchld_handlercSsi|]\}}|t�||��qSr)�signal)r(�sig�valrrrrC�s�zmain.<locals>.<dictcomp>)rKcSsg|]\}}|j�qSr)�fileobj)r(�key�eventsrrr�
61  <listcomp>�szmain.<locals>.<listcomp>r�zNot at EOF?i�����rz.forkserver: waitpid returned unexpected pid %dzToo many ({0:n}) fds to send)=r�current_process�_inheritingr�import_main_path�
62  __import__�ImportErrorr�_close_stdinr!r4�set_blockingr]�SIGCHLD�SIGINT�SIG_IGNrF�
set_wakeup_fdr1r2�	selectors�DefaultSelector�getsockname�_forkserverr�register�
63  EVENT_READ�select�read�
64  SystemExitr#rD�ChildProcessError�pop�waitstatus_to_exitcode�write_signed�BrokenPipeErrorr"�warnings�warn�acceptr�recvfdsr/r.�RuntimeError�format�fork�extend�values�
65  _serve_one�	Exception�sys�
66  excepthook�exc_info�stderr�flush�_exit�OSError�errno�ECONNABORTED)Zlistener_fdrU�preloadr=r>�modnameZsig_rZsig_wr\�handlers�old_handlersZ	pid_to_fdrS�selectorZrfdsrO�stsr:�
67  returncode�sr7r;�code�
68  unused_fds�fd�errr�main�s�
69  ���
70  �
71  �
72  �
73  
74  ���
75  ��
76  
77  ����
78  ���&����8�r�c	Csht�d�|��D]
79  \}}t�||�q	|D]}t�|�q|^t_tj_	t_
80  t�|�}t�
||�}|S)Nre)r]rprFr!r"rtrr�_resource_tracker�_fdr�dupr�_main)	r;r7r�r�r^r_r��parent_sentinelr�rrrr�+s
81  �
82  r�cCsXd}tj}t|�|kr%t�||t|��}|std��||7}t|�|kst�|�dS)Nrdzunexpected EOFr)�
SIGNED_STRUCT�sizer.r!rx�EOFError�unpack)r�rR�lengthr�rrr�read_signedBs�r�cCsBt�|�}|rt�||�}|dkrtd��||d�}|sdSdS)Nrzshould not get here)r��packr!�writer�)r��n�msg�nbytesrrrr}Ls
83  �r})NN) r�r!rqr]r1�structr�rr�rr�contextrrrr�__all__r/�Structr��objectrr�r�r�r}rtr	r
84  rrrrrr�<module>s<
85  
86  
87  
88