Edit File: forkserver.cpython-36.opt-1.pyc
3 � \�!������������������@���s����d�dl�Z�d�dlZd�dlZd�dlZd�dlZd�dlZd�dlZd�dlZddlm Z �ddlm Z �ddlmZ�ddlm Z �ddlmZ�ddlmZ�d d ddgZd Zejd�ZG�dd��de�Zddd�Zdd��Zdd��Zdd��Ze��ZejZejZejZejZdS�)�����N����)� connection)�process)� reduction)�semaphore_tracker)�spawn)�util�ensure_running�get_inherited_fds�connect_to_new_process�set_forkserver_preload�����Qc���������������@���s4���e�Zd�Zdd��Zdd��Zdd��Zdd��Zd d ��ZdS�)� ForkServerc�������������C���s.���d�|�_�d�|�_d�|�_d�|�_tj��|�_dg|�_d�S�)N�__main__)�_forkserver_address�_forkserver_alive_fd�_forkserver_pid�_inherited_fds� threadingZLock�_lock�_preload_modules)�self��r����2/usr/lib64/python3.6/multiprocessing/forkserver.py�__init__!���s���� zForkServer.__init__c�������������C���s&���t�dd��|�jD���std��||�_dS�)z>Set list of module names to try to load in forkserver process.c�������������s���s���|�]}t�|�tkV��qd�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�)z�Return 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����zForkServer.get_inherited_fdsc�������������C���s����|�j����t|�d�tkr td��tjtj���}|j|�j��tj ��\}}tj ��\}}|||�j tj��g}||7�}z<yt j||��||fS����tj|��tj|����Y�nX�W�dtj|��tj|��X�W�dQ�R�X�dS�)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. ����ztoo many fdsN)r ����len�MAXFDS_TO_SEND� ValueError�socket�AF_UNIXZconnectr����os�piper���r���Zgetfdr���Zsendfds�close)r����fdsZclientZparent_r�child_w�child_rZparent_wZallfdsr���r���r���r���7���s&���� z!ForkServer.connect_to_new_processc����������������s���|�j���n�tj���|�jdk rVtj|�jtj�\}}|s8dS�tj|�j��d|�_ d|�_d|�_d}|�j r�ddh��tjd�}t ��fdd�|j��D���}ni�}tjtj���}tjd �}|j|��tj|d ��|j���tj��\}}ztyV|j��|g} ||j��||�j |f;�}tj��} | gtj���}|d|g7�}tj| || �}W�n���tj|����Y�nX�W�dtj|��X�||�_ ||�_||�_W�dQ�R�X�W�dQ�R�X�dS�) z�Make 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; zmain(%d, %d, %r, **%r)� main_path�sys_path�ignorec�������������3���s"���|�]\}}|��kr||fV��qd�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���Zget_preparation_data�dict�itemsr'���r(���r���Zarbitrary_addressZbind�chmodZlistenr*����filenoZget_executabler���Z_args_from_interpreter_flagsZspawnv_passfds)r����pidZstatus�cmd�data�listenerZaddress�alive_rZalive_wZfds_to_passZexe�argsr���)r4���r���r ���T���sL���� � zForkServer.ensure_runningN)�__name__� __module__�__qualname__r���r���r ���r���r ���r���r���r���r���r������s ���r���c����������4���C���s���|rhd|kr8|dk r8dt�j��_ztj|��W�dt�j��`X�x.|D�]&}yt|��W�q>�tk rb���Y�q>X�q>W�tj���t j t jt jt ji}dd��|j ��D��}tjtj|�d���,}tj����} |j��t_| j|tj��| j|tj��x�y�xdd��| j��D��} | r�P�q�W�|| k�rt�|j��d ��l}d }tj��d k�r�zFyt||||��W�n.�tk �rn���tjtj �����tj!j"���Y�nX�W�dtj#|��X�W�dQ�R�X�W�q��t$k �r��} �z| j%t%j&k�r���W�Y�dd} ~ X�q�X�q�W�W�dQ�R�X�W�dQ�R�X�dS�)zRun forkserver.r���NTc�������������S���s���i�|�]\}}t�j�||�|�qS�r���)�signal)r����sig�valr���r���r���� <dictcomp>����s���zmain.<locals>.<dictcomp>)r:���c�������������S���s���g�|�]\}}|j��qS�r���)Zfileobj)r����keyZeventsr���r���r���� <listcomp>����s����zmain.<locals>.<listcomp>r���r���)'r���Zcurrent_processZ_inheritingr���Zimport_main_path� __import__�ImportErrorr���Z_close_stdinrD����SIGCHLD�SIG_IGN�SIGINTr8���r'���r(���� selectorsZDefaultSelectorZgetsockname�_forkserverr����registerZ EVENT_READZselect� SystemExitZacceptr)����fork� _serve_one� Exception�sys� excepthook�exc_info�stderr�flush�_exit�OSError�errnoZECONNABORTED)Zlistener_fdr?���Zpreloadr/���r0����modname�handlersZold_handlersr>���ZselectorZrfds�s�code�er���r���r����main����sR���� rc���c�������������C���s����|j����tj�|��x |j��D�]\}}tj||��qW�tj|�td��}|�j����|^}}t_} t_ | t j_t |tj����dtjkr�dd�l} | j���tj|�}t ||��d�S�)Nr����randomr���)r+���r)���r8���rD���r���Zrecvfdsr%���rP���r���r���r���Z_semaphore_trackerZ_fd�write_unsigned�getpidrV����modulesrd���Zseedr����_main)r`���r>���r?���r_���rE���rF���r,���r.���r-���Zstfdrd���ra���r���r���r���rT�������s���� rT���c�������������C���sR���d}t�j}x8t|�|k�rBtj|�|t|���}|s8td��||7�}qW�t�j|�d�S�)N�����zunexpected EOFr���)�UNSIGNED_STRUCT�sizer$���r)����read�EOFErrorZunpack)�fdr=���Zlengthr`���r���r���r���� read_unsigned����s����ro���c�������������C���s@���t�j|�}x0|r:tj|�|�}|dkr,td��||d���}qW�d�S�)Nr���zshould not get here)rj���Zpackr)����write�RuntimeError)rn����n�msg�nbytesr���r���r���re�������s���� re���)NN)r]���r)���rO���rD���r'���ZstructrV���r�����r���r����contextr���r���r���r����__all__r%���ZStructrj����objectr���rc���rT���ro���re���rP���r ���r ���r���r���r���r���r���r����<module>���s6��� s =!