관리-도구
편집 파일: forkserver.cpython-39.pyc
a �����DOgn/����������������������@���s����d�dl�Z�d�dlZd�dlZd�dlZd�dlZd�dlZd�dlZd�dlZd�dlZddl m Z �ddl mZ�ddlm Z �ddl mZ�ddl mZ�ddl mZ�g�d �Zd Ze�d�ZG�dd ��d e�Zddd�Zdd��Zdd��Zdd��Ze��ZejZejZejZejZdS�)�����N����)� connection)�process)� reduction)�resource_tracker)�spawn)�util)�ensure_running�get_inherited_fds�connect_to_new_process�set_forkserver_preload�����qc�������������������@���sD���e�Zd�Zdd��Zdd��Zdd��Zdd��Zd d ��Zdd��Zd d��Z dS�)� ForkServerc�����������������C���s.���d�|�_�d�|�_d�|�_d�|�_t���|�_dg|�_d�S�)N�__main__)�_forkserver_address�_forkserver_alive_fd�_forkserver_pid�_inherited_fds� threading�Lock�_lock�_preload_modules��self��r����2/usr/lib64/python3.9/multiprocessing/forkserver.py�__init__"���s���� zForkServer.__init__c�����������������C���s2���|�j���|�����W�d�����n1�s$0����Y��d�S��N)r����_stop_unlockedr���r���r���r����_stop*���s����zForkServer._stopc�����������������C���sV���|�j�d�u�rd�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���� zForkServer._stop_unlockedc�����������������C���s&���t�dd��|�jD���std��||�_dS�)z>Set list of module names to try to load in forkserver process.c�����������������s���s���|�]}t�|�tu�V��qd�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�)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 ���D���s����zForkServer.get_inherited_fdsc�������������� ���C���s��|������t|�d�tkr td��t�tj���}|�|�j��t� ��\}}t� ��\}}|||�j t���g}||7�}zvz:t �||��||fW�W�t�|��t�|��W��d����S����t�|��t�|����Y�n0�W�t�|��t�|��nt�|��t�|��0�W�d����n1��s0����Y��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_UNIX�connectr���r!����piper���r���Zgetfdr����sendfdsr"���)r����fds�client�parent_r�child_w�child_r�parent_wZallfdsr���r���r���r���L���s2����� � � z!ForkServer.connect_to_new_processc��������������������s���|�j�����t����|�jdurbt�|�jtj�\}}|sDW�d����dS�t�|�j��d|�_ d|�_d|�_d}|�j r�ddh��t�d�}��fdd�|� ��D��}ni�}t�tj���}t�d�}|�|��t�|�s�t�|d ��|����t���\}}z~zV|���|g} ||���||�j |f;�}t���} | gt����}|d |g7�}t�| || �}W�n���t�|����Y�n0�W�t�|��nt�|��0�||�_ ||�_||�_W�d����n1��s�0����Y��W�d����n1��s�0����Y��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. NzCfrom multiprocessing.forkserver import main; main(%d, %d, %r, **%r)� main_path�sys_path�ignorec��������������������s���i�|�]\}}|��v�r||�qS�r���r���)r(����x�y�Zdesired_keysr���r���� <dictcomp>����r+���z-ForkServer.ensure_running.<locals>.<dictcomp>r3���i���z-c)r���r���r ���r���r!���r#����WNOHANGr"���r���r���r���r���Zget_preparation_data�itemsr2���r3���r����arbitrary_address�bindr���r$����chmod�listenr5����filenoZget_executable�_args_from_interpreter_flags�spawnv_passfds)r����pid�status�cmd�data�listener�address�alive_rZalive_wZfds_to_passZexe�argsr���rB���r���r ���i���sN���� � zForkServer.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@|dur@dt����_zt�|��W�t����`n t����`0�|D�]$}zt|��W�qD�tyf���Y�qD0�qDt����t � ��\}}t �|d��t �|d��dd��}tj |tjtji} dd��| ���D��} t�|��i�}tjtj|�d ���}t������} |���t_| �|tj��| �|tj��| �|tj���zjd d��| ���D��}|�r(�qH�q(||v��rpt �|d�d k�slJ�d��t�||v��r(t �|d��zt �dt j�\}}W�n�t �y����Y��q(Y�n0�|dk�rƐq(|�!|d�}|du�rt �"|�}zt#||��W�n�t$�y���Y�n0�t �%|��nt&�'d|����q�||v��r�|�(��d���<}t)�*|t+d��}t,|�t+k�rrt-d�.t,|����|^}}}|�%���t �/��}|dk�r"d}zxz<|�%���| �%���||||g}|�0|�1����t2|||| �}W�n,�t3�y���t4j5t4�6�����t4j7�8���Y�n0�W�t �9|��nt �9|��0�nLzt#||��W�n�t$�yD���Y�n0�|||<�t �%|��|D�]}t �%|���q\W�d����n1��s�0����Y��W�n6�t:�y��}�z|j;t;j<k�r���W�Y�d}~n d}~0�0��q$W�d����n1��s�0����Y��W�d����n1��s0����Y��dS�)zRun forkserver.r���NTFc������������������W���s���d�S�r���r���)Z_unusedr���r���r����sigchld_handler����s����zmain.<locals>.sigchld_handlerc�����������������S���s���i�|�]\}}|t���||��qS�r���)�signal)r(����sig�valr���r���r���rC�������s����zmain.<locals>.<dictcomp>)rJ���c�����������������S���s���g�|�]\}}|j��qS�r���)�fileobj)r(����key�eventsr���r���r���� <listcomp>����r+���zmain.<locals>.<listcomp>r���r+���zNot at EOF?i������r���z.forkserver: waitpid returned unexpected pid %dzToo many ({0:n}) fds to send)=r����current_processZ_inheritingr���Zimport_main_path� __import__�ImportErrorr����_close_stdinr!���r5����set_blockingrY����SIGCHLD�SIGINT�SIG_IGNrE���� set_wakeup_fdr2���r3���� selectors�DefaultSelector�getsockname�_forkserverr����register� EVENT_READ�select�read� SystemExitr#���rD����ChildProcessError�pop�waitstatus_to_exitcode�write_signed�BrokenPipeErrorr"����warnings�warn�acceptr����recvfdsr0���r/����RuntimeError�format�fork�extend�values� _serve_one� Exception�sys� excepthook�exc_info�stderr�flush�_exit�OSError�errnoZECONNABORTED)Zlistener_fdrS���Zpreloadr=���r>����modnameZsig_rZsig_wrX����handlersZold_handlersZ pid_to_fdrQ����selectorZrfdsrM����stsr:���� returncode�sr7���r;����code� unused_fds�fd�er���r���r����main����s����� �� � � �� � 2r����c����������� ������C���sh���t��d��|���D�]\}}t���||��q|D�]}t�|��q,|^t_tj_ t_ t�|��}t� |�|�}|S�)Nr`���)rY���ri���rE���r!���r"���rm���r���r����_resource_trackerZ_fdr����dupr���Z_main) r;���r7���r����r����rZ���r[���r�����parent_sentinelr����r���r���r���r����+��s���� � r����c�����������������C���sN���d}t�j}t|�|k�r@t�|�|t|���}|s6td��||7�}q t��|�d�S�)Nr+���zunexpected EOFr���)� SIGNED_STRUCT�sizer/���r!���rq����EOFError�unpack)r����rP����lengthr����r���r���r����read_signedB��s���� r����c�����������������C���s<���t��|�}|r8t�|�|�}|dkr*td��||d���}q d�S�)Nr���zshould not get here)r�����packr!����writer|���)r�����n�msg�nbytesr���r���r���rv���L��s���� rv���)NN) r����r!���rj���rY���r2����structr����r���rx�����r���r����contextr���r���r���r����__all__r0����Structr�����objectr���r����r����r����rv���rm���r ���r ���r���r���r���r���r���r����<module>���s:��� � �