관리-도구
편집 파일: unix_events.cpython-311.opt-1.pyc
� �����P�����������������������������d�Z�ddlZddlZddlZddlZddlZddlZddlZddlZddl Z ddl Z ddlZddlZddl mZ�ddl mZ�ddl mZ�ddl mZ�ddl mZ�dd l mZ�dd l mZ�ddl mZ�ddl mZ�dd l mZ�ddlmZ�dZe j��������dk����r�ed�������������d��Zd��Z�G�d��dej��������������������Z �G�d��dej!��������������������Z"�G�d��dej#��������ej$��������������������Z%�G�d��dej&��������������������Z'�G�d��d������������Z(�G�d��de(������������Z)�G�d ��d!e(������������Z*�G�d"��d#e*������������Z+�G�d$��d%e*������������Z,�G�d&��d'e(������������Z-�G�d(��d)e(������������Z.�G�d*��d+ej/��������������������Z0e Z1e0Z2dS�),z2Selector event loop for Unix with signal handling.�����N����)�base_events)�base_subprocess)� constants)� coroutines)�events)� exceptions)�futures)�selector_events)�tasks)� transports)�logger)�SelectorEventLoop�AbstractChildWatcher�SafeChildWatcher�FastChildWatcher�PidfdChildWatcher�MultiLoopChildWatcher�ThreadedChildWatcher�DefaultEventLoopPolicy�win32z+Signals are not really supported on Windowsc�����������������������dS�)zDummy signal handler.N��)�signum�frames��� �:/opt/alt/python311/lib64/python3.11/asyncio/unix_events.py�_sighandler_noopr���*���s�������D�����c������������������P����� �t����������j��������|�������������S�#�t����������$�r�|�cY�S�w�xY�w�N)�os�waitstatus_to_exitcode� ValueError)�statuss��� r���r"���r"���/���s>��������(��0�0�0����������� � � � ���s������%�%c���������������������������e�Zd�ZdZd��fd� Z��fd�Zd��Zd��Zd��Zd��Z d ��Z � �dd �Z � �dd�Z �dd�Z d ��Z �ddddddd�d�Z �dddddddd�d�Zd��Zd��Zd��Zd��Z��xZS�)�_UnixSelectorEventLoopzdUnix event loop. Adds signal handling and UNIX Domain Socket support to SelectorEventLoop. Nc������������������X������t���������������������������������������������|�������������i�|�_��������d�S�r ���)�super�__init__�_signal_handlers)�self�selector� __class__s��� �r���r)���z_UnixSelectorEventLoop.__init__?���s)������� ������"�"�"� "����r���c������������������N�����t������������������������������������������������������������t����������j����������������������s.t ����������|�j��������������������D�]}|����������������������|��������������d�S�|�j��������r;t����������j��������d|��d�t����������|���������������|�j��������� �����������������������������������d�S�d�S�)NzClosing the loop z@ on interpreter shutdown stage, skipping signal handlers removal��source)r(����close�sys� is_finalizing�listr*����remove_signal_handler�warnings�warn�ResourceWarning�clear)r+����sigr-���s��� �r���r1���z_UnixSelectorEventLoop.closeC���s�������� ��� � ����� �"�"�� .��D�1�2�2�� 0�� 0���*�*�3�/�/�/�/� 0�� 0���$�� .�� ��I�$��I��I��I��.�%)� +��+��+��+� ��%�+�+�-�-�-�-�-� .�� .r���c������������������@�����|D�]}|s�|�����������������������|��������������d�S�r ���)�_handle_signal)r+����datar���s��� r����_process_self_dataz)_UnixSelectorEventLoop._process_self_dataQ���s=�������� (�� (�F��� ������'�'�'�'� (�� (r���c������������������R����t����������j��������|������������st����������j��������|������������rt����������d�������������|����������������������|�������������|������������������������������������� �t ����������j��������|�j��������� �����������������������������������������������n5#�t����������t����������f$�r!}t����������t����������|�������������������������d}~ww�xY�wt����������j��������|||�d������������}||�j��������|<��� �t ����������j��������|t"�����������������������t ����������j��������|d�������������dS�#�t����������$�r�}|�j��������|=�|�j��������sI �t ����������j��������d�������������n3#�t����������t����������f$�r}t'����������j��������d|�������������Y�d}~nd}~ww�xY�w|j��������t*����������j��������k����rt����������d|��d����������������d}~ww�xY�w)z�Add a handler for a signal. UNIX only. Raise ValueError if the signal number is invalid or uncatchable. Raise RuntimeError if there is a problem setting up the handler. z3coroutines cannot be used with add_signal_handler()NF����set_wakeup_fd(-1) failed: %s�sig � cannot be caught)r����iscoroutine�iscoroutinefunction� TypeError� _check_signal� _check_closed�signal� set_wakeup_fd�_csock�filenor#����OSError�RuntimeError�strr����Handler*���r����siginterruptr����info�errno�EINVAL)r+���r:����callback�args�exc�handle�nexcs��� r����add_signal_handlerz)_UnixSelectorEventLoop.add_signal_handlerX���s������� �"�8�,�,�� 9��.�x�8�8� 9���8��9��9�� 9����3���������� )� � � ���!3�!3�!5�!5�6�6�6�6���G�$�� )�� )�� )��s�3�x�x�(�(�(����� )�������x��t�T�:�:��%+���c�"� �� �M�#�/�0�0�0�� ���U�+�+�+�+�+���� �� �� ��%�c�*��(�� F�F��(��,�,�,�,��"�G�,��F��F��F��K� >��E�E�E�E�E�E�E�E�����F������y�E�L�(�(�"�#@�#�#@�#@�#@�A�A�A������ ���sZ����"+B��C��B;�;C��%/D�� F&� F!�0E�F!�E5�E0�+F!�0E5�5,F!�!F&c�����������������������|�j������������������������������|������������}|�dS�|j��������r|����������������������|�������������dS�|����������������������|�������������dS�)z2Internal helper that is the actual signal handler.N)r*����get� _cancelledr5����_add_callback_signalsafe)r+���r:���rX���s��� r���r<���z%_UnixSelectorEventLoop._handle_signal����sa�������&�*�*�3�/�/���>��F���� 2��&�&�s�+�+�+�+�+��)�)�&�1�1�1�1�1r���c����������������������|�����������������������|������������� �|�j��������|=�n#�t����������$�r�Y�dS�w�xY�w|t����������j��������k����r t����������j��������}nt����������j��������} �t����������j��������||�������������n;#�t����������$�r.}|j��������t����������j ��������k����rt����������d|��d����������������d}~ww�xY�w|�j��������sI �t����������j��������d�������������n3#�t����������t����������f$�r}t����������j��������d|�������������Y�d}~nd}~ww�xY�wdS�)zwRemove a handler for a signal. UNIX only. Return True if a signal handler was removed, False if not. FrB���rC���Nr@���rA���T)rG���r*����KeyErrorrI����SIGINT�default_int_handler�SIG_DFLrM���rS���rT���rN���rJ���r#���r���rR���)r+���r:����handlerrW���s��� r���r5���z,_UnixSelectorEventLoop.remove_signal_handler����sK����� � ���3���� ��%�c�*�*���� �� �� ��5�5� ������&�-����0�G�G��n�G� ��M�#�w�'�'�'�'���� �� �� ��y�E�L�(�(�"�#@�#�#@�#@�#@�A�A�A������ ������$�� A� A��$�R�(�(�(�(����(�� A�� A�� A���:�C�@�@�@�@�@�@�@�@����� A������ts<���� �� .�.�A1��1 B)�;)B$�$B)�4C �� C9�C4�4C9c�����������������������t����������|t����������������������st����������d|���������������|t����������j����������������������vrt����������d|����������������dS�)z�Internal helper to validate a signal. Raise ValueError if the signal number is invalid or uncatchable. Raise RuntimeError if there is a problem setting up the handler. zsig must be an int, not zinvalid signal number N)� isinstance�intrF���rI���� valid_signalsr#���)r+���r:���s��� r���rG���z$_UnixSelectorEventLoop._check_signal����sa��������#�s�#�#�� @��>�s�>�>�?�?�?��f�*�,�,�,�,��;�c�;�;�<�<�<��-�,r���c������������������(�����t����������|�||||������������S�r ���)�_UnixReadPipeTransport�r+����pipe�protocol�waiter�extras��� r����_make_read_pipe_transportz0_UnixSelectorEventLoop._make_read_pipe_transport����s������%�d�D�(�F�E�J�J�Jr���c������������������(�����t����������|�||||������������S�r ���)�_UnixWritePipeTransportrk���s��� r����_make_write_pipe_transportz1_UnixSelectorEventLoop._make_write_pipe_transport����s������&�t�T�8�V�U�K�K�Kr���c ������������������� ��K����t����������j����������������������5�} | �����������������������������������st����������d�������������|������������������������������������}t����������|�|||||||f||d�| ��}| ���������������������|�����������������������������������|�j��������|������������� �|��d�{V����nN#�t����������t����������f$�r���t����������$�r0�|������������������������������������|� ������������������������������������d�{V������w�xY�w �d�d�d��������������n#�1�swxY�w�Y���|S�)NzRasyncio.get_child_watcher() is not activated, subprocess support is not installed.)rn���ro���)r����get_child_watcher� is_activerN���� create_future�_UnixSubprocessTransport�add_child_handler�get_pid�_child_watcher_callback� SystemExit�KeyboardInterrupt� BaseExceptionr1����_wait) r+���rm���rV����shell�stdin�stdout�stderr�bufsizero����kwargs�watcherrn����transps ��� r����_make_subprocess_transportz1_UnixSelectorEventLoop._make_subprocess_transport����s������������ %� '� '�� �7��$�$�&�&�� K� �#��$J��K��K��K��'�'�)�)�F�-�d�H�d�E�.3�V�V�W�8�5;�5�8��8��17�8��8�F� � �%�%�f�n�n�&6�&6�&*�&B�F� L�� L�� L� ������������ 1�2�� �� �� �� �� �� �� ��������l�l�n�n�$�$�$�$�$�$�$�� ������# �� �� �� �� �� �� �� �� �� �� ����� �� �� �� �2�� s+����A=C8�B�C8�AC(�(C8�8C<�?C<c������������������H�����|�����������������������|�j��������|j��������|�������������d�S�r ���)�call_soon_threadsafe� call_soon�_process_exited)r+����pid� returncoder����s��� r���r{���z._UnixSelectorEventLoop._child_watcher_callback����s%�������!�!�$�.�&�2H�*�U�U�U�U�Ur���)�ssl�sock�server_hostname�ssl_handshake_timeout�ssl_shutdown_timeoutc���������������������K����|r|�t����������d�������������n3|�t����������d�������������|�t����������d�������������|�t����������d�������������|��|�t����������d�������������t����������j��������|������������}t����������j��������t����������j��������t����������j��������d������������} �|���������������������d�������������|����������������������||��������������d�{V����n|#��|��������������������������������������xY�w|�t����������d�������������|j ��������t����������j��������k����s|j ��������t����������j��������k����rt����������d |���������������|���������������������d�������������|����������������������||||||� ��������������d�{V���\��}} || fS�)Nz/you have to pass server_hostname when using sslz+server_hostname is only meaningful with ssl�1ssl_handshake_timeout is only meaningful with ssl�0ssl_shutdown_timeout is only meaningful with ssl�3path and sock can not be specified at the same timer���Fzno path and sock were specified�.A UNIX Domain Stream Socket was expected, got )r����r����)r#���r!����fspath�socket�AF_UNIX�SOCK_STREAM�setblocking�sock_connectr1����family�type�_create_connection_transport) r+����protocol_factory�pathr����r����r����r����r����� transportrm���s ��� r����create_unix_connectionz-_UnixSelectorEventLoop.create_unix_connection����s������������� H��&� �E�G��G��G��'���*� �!N�O�O�O�$�0� �G�I��I��I�#�/� �F�H��H��H������ �I�K��K��K���9�T�?�?�D��=����1C�Q�G�G�D� �� � ��'�'�'��'�'��d�3�3�3�3�3�3�3�3�3�3�� �� � ����������|� �!B�C�C�C���v�~�-�-��I��!3�3�3� �M�T�M�M�O��O��O����U�#�#�#�$(�$E�$E��"�C��"7�!5��%F��%7��%7��7��7��7��7��7��7�� �8���(�"�"s����1C��C%�d���T)r�����backlogr����r����r����� start_servingc���������� ����������K����t����������|t����������������������rt����������d�������������|�|st����������d�������������|�|st����������d�������������|��Z|�t����������d�������������t ����������j��������|������������}t ����������j��������t����������j��������t����������j��������������������}|d���������dvry �t����������j ��������t ����������j ��������|������������j��������������������rt ����������j��������|�������������n8#�t����������$�r�Y�n,t����������$�r } t����������j��������d|| �������������Y�d�} ~ nd�} ~ ww�xY�w �|���������������������|�������������n�#�t����������$�rP} |������������������������������������| j��������t&����������j��������k����r!d|�d �}t����������t&����������j��������|������������d����d�} ~ w�|��������������������������������������xY�w|�t����������d �������������|j��������t����������j��������k����s|j��������t����������j��������k����rt����������d|���������������|���������������������d�������������t1����������j��������|�|g|||||������������}|r.|������������������������������������t7����������j��������d��������������d�{V����|S�) Nz*ssl argument must be an SSLContext or Noner����r����r����r���)r�����z2Unable to check or remove stale UNIX socket %r: %rzAddress z is already in usez-path was not specified, and no sock specifiedr����F)rf����boolrF���r#���r!���r����r����r����r�����stat�S_ISSOCK�st_mode�remove�FileNotFoundErrorrM���r����error�bindr1���rS���� EADDRINUSEr����r����r����r����Server�_start_servingr����sleep) r+���r����r����r����r����r����r����r����r�����errrW����msg�servers ��� r����create_unix_serverz)_UnixSelectorEventLoop.create_unix_server��s������������c�4� � �� J��H�I�I�I� �,�S�,��C�E��E�� E�� �+�C�+��B�D��D�� D������ �I�K��K��K���9�T�?�?�D��=����1C�D�D�D���A�w�k�)�)�6��}�R�W�T�]�]�%:�;�;��(�� �$������(��������D���6��6��6��L��"*�+/��6��6��6��6��6��6��6��6�����6���� �� � �$�������� �� �� �� � �����9�� 0�0�0��@�T�?�?�?�C�!�%�"2�C�8�8�d�B������ �� � ���������|� �C�E��E��E����v�~�-�-��I��!3�3�3� �M�T�M�M�O��O��O�� ��������#�D�4�&�2B�$'��2G�$8�:��:����� !��!�!�#�#�#���+�a�.�.� � � � � � � �� s7����)?C)��) D�5 D�>D�D�"D8��8 F'�AF � F'c����������� �����������K���� �t�����������j���������n"#�t����������$�r�t����������j��������d�������������w�xY�w �|�����������������������������������}n2#�t����������t����������j��������f$�r}t����������j��������d�������������d�}~ww�xY�w �t����������j��������|������������j ��������}n"#�t����������$�r�t����������j��������d�������������w�xY�w|r|n|}|sdS�|������������������������������������} |����������������������| d�|||||d�������������| ��d�{V���S�)Nzos.sendfile() is not availableznot a regular filer���) r!����sendfile�AttributeErrorr ����SendfileNotAvailableErrorrL����io�UnsupportedOperation�fstat�st_sizerM���rw����_sock_sendfile_native_impl) r+���r�����file�offset�countrL���r�����fsize� blocksize�futs ��� r����_sock_sendfile_nativez,_UnixSelectorEventLoop._sock_sendfile_native`��sN��������� 2��K�K�K���� 2�� 2�� 2��6�0�2��2�� 2� 2���� M��[�[�]�]�F�F���� 7�8�� M�� M�� M��6�7K�L�L�L����� M���� M��H�V�$�$�,�E�E���� M�� M�� M��6�7K�L�L�L� M����"�-�E�E�� ��� ��1�� � �"�"���'�'��T�4��(.��y�!� E�� E�� E��y�y�y�y�y�y�s+������0�A �� A8�A3�3A8�<B��B5c ����������� �������L����|������������������������������������} |�|����������������������|�������������|�����������������������������������r|����������������������|||�������������d�S�|r9||z ��}|dk����r.|����������������������|||�������������|���������������������|�������������d�S� �t����������j��������| |||������������} | dk����r.|����������������������|||�������������|���������������������|�������������d�S�|| z ��}|| z ��}|�|����������������������||�������������|����������������������| |�j ��������|| ||||||� ��� ���������d�S�#�t����������t����������f$�r?�|�|����������������������||�������������|����������������������| |�j ��������|| ||||||� ��� ���������Y�d�S�t����������$�r�}|�N|j ��������t����������j��������k����r9t����������|������������t ����������ur#t!����������dt����������j��������������������}||_��������|}|dk����rAt%����������j��������d������������} |����������������������|||�������������|���������������������| �������������n2|����������������������|||�������������|���������������������|�������������Y�d�}~d�S�Y�d�}~d�S�d�}~wt*����������t,����������f$�r���t.����������$�r7}|����������������������|||�������������|���������������������|�������������Y�d�}~d�S�d�}~ww�xY�w)Nr���zsocket is not connectedzos.sendfile call failed)rL���� remove_writer� cancelled�_sock_sendfile_update_filepos� set_resultr!���r�����_sock_add_cancellation_callback� add_writerr�����BlockingIOError�InterruptedErrorrM���rS����ENOTCONNr�����ConnectionError� __cause__r ���r����� set_exceptionr|���r}���r~���)r+���r����� registered_fdr����rL���r����r����r����� total_sent�fd�sentrW����new_excr����s��� r���r����z1_UnixSelectorEventLoop._sock_sendfile_native_implw��sb����� �[�[�]�]���$� � ���}�-�-�-��=�=�?�?�� ��.�.�v�v�z�J�J�J��F��� �� �*�I��A�~�~��2�2�6�6�:�N�N�N����z�*�*�*���1 F��;�r�6�6�9�=�=�D�J��q�y�y��2�2�6�6�:�N�N�N����z�*�*�*�*�*��$����d�"� � �(��8�8��d�C�C�C�����D�$C�S� "�D�&� &��y�*�F��F��F��F��F��[� �!1�2�� B�� B�� B��$��4�4�S�$�?�?�?��O�O�B�� ?����f�"�E�9�j� B�� B�� B�� B�� B�� B���� '�� '�� '��)��I���/�/���I�I�_�4�4� �*�-�u�~�?��?��$'��!����Q��� �!�:�-�/��/���2�2�6�6�:�N�N�N��!�!�#�&�&�&�&��2�2�6�6�:�N�N�N��!�!�#�&�&�&�&�&�&�&�&�&��'�&�&�&�&�&�������-�.�� �� �� ���� #�� #�� #��.�.�v�v�z�J�J�J����c�"�"�"�"�"�"�"�"�"����� #���s,����D'��'AJ#�6 J#�?CI�J#�,,J�J#c������������������V�����|dk����r"t����������j��������||t�����������j���������������������d�S�d�S��Nr���)r!����lseek�SEEK_SET)r+���rL���r����r����s��� r���r����z4_UnixSelectorEventLoop._sock_sendfile_update_filepos���s.��������>�>��H�V�V�R�[�1�1�1�1�1���>r���c������������������@�����������fd�}|����������������������|�������������d�S�)Nc������������������������|�������������������������������������r1������������������������������������}|dk����r����������������������|�������������d�S�d�S�d�S�)Nr@���)r����rL���r����)r����r����r+���r����s��� ��r����cbzB_UnixSelectorEventLoop._sock_add_cancellation_callback.<locals>.cb���sR��������}�}���� +��[�[�]�]����8�8��&�&�r�*�*�*�*�*� +�� +��8r���)�add_done_callback)r+���r����r����r����s���` ` r���r����z6_UnixSelectorEventLoop._sock_add_cancellation_callback���s>�������� +�� +�� +�� +�� +�� +� � ���b�!�!�!�!�!r���r ����NN)�__name__� __module__�__qualname__�__doc__r)���r1���r>���rZ���r<���r5���rG���rp���rs���r����r{���r����r����r����r����r����r����� __classcell__�r-���s���@r���r&���r&���9���s������������������ #��#��#��#��#��#�.��.��.��.��.�(��(��(�+��+��+�Z2��2��2������@ =�� =�� =��@D�(,�K��K��K��K��AE�)-�L��L��L��L��04��������<V��V��V� �*.�0#��4� �"&�!%�0#��0#��0#��0#��0#�f�*.�G��s��"&�!%��G��G��G��G��G�R�����.DF��DF��DF�L2��2��2�"��"��"��"��"��"��"r���r&���c���������������������������e�Zd�ZdZd��fd� Zd��Zd��Zd��Zd��Zd��Z d ��Z d ��Zd��Zd��Z d ��Zej��������fd�Zdd�Zd��Zd��Z��xZS�)rj���i���Nc�����������������������t���������������������������������������������|�������������||�j��������d<���||�_��������||�_��������|�����������������������������������|�_��������||�_��������d|�_��������d|�_ ��������t����������j��������|�j��������������������j��������}t����������j��������|������������sLt����������j��������|������������s8t����������j��������|������������s$d�|�_��������d�|�_��������d�|�_��������t#����������d�������������t����������j��������|�j��������d�������������|�j�����������������������������|�j��������j��������|��������������|�j�����������������������������|�j��������|�j��������|�j���������������������|�(|�j�����������������������������t.����������j��������|d��������������d�S�d�S�)Nrl���Fz)Pipe transport is for pipes/sockets only.)r(���r)����_extra�_loop�_piperL����_fileno� _protocol�_closing�_pausedr!���r����r����r�����S_ISFIFOr�����S_ISCHRr#����set_blockingr�����connection_made�_add_reader�_read_readyr ����_set_result_unless_cancelled)r+����looprl���rm���rn���ro����moder-���s��� �r���r)���z_UnixReadPipeTransport.__init__���sb������ ���������"���F���� ��� ��{�{�}�}���!����� �����x���%�%�-��� �d�#�#�� J�� �d�#�#� J���T�"�"� J���D�J��D�L�!�D�N��H�I�I�I� ����e�,�,�,�� ���T�^�;�T�B�B�B�� ���T�-�!�\�4�+;� =�� =�� =����J� � ��!E�!'�� /�� /�� /�� /�� /���r���c������������������h�����|�������������������������������������sd�S�|�j�����������������������������||�������������d�S�r ���)� is_readingr����r����)r+���r����rU���s��� r���r����z"_UnixReadPipeTransport._add_reader���s7��������� � �� ��F�� ���r�8�,�,�,�,�,r���c������������������"�����|�j����������o|�j���������S�r ���)r����r�����r+���s��� r���r����z!_UnixReadPipeTransport.is_reading���s�������<��5�� �$5�5r���c������������������`����|�j���������j��������g}|�j���������|���������������������d�������������n|�j��������r|���������������������d�������������|���������������������d|�j������������������������t ����������|�j��������dd�������������}|�j���������U|�St����������j ��������||�j��������t����������j��������������������}|r|���������������������d�������������nH|���������������������d�������������n2|�j���������|���������������������d�������������n|���������������������d�������������d���������������������d � ��������������������|������������������������S�) N�closed�closing�fd=� _selector�polling�idle�open�<{}>� )r-���r����r�����appendr����r�����getattrr����r����_test_selector_event� selectors� EVENT_READ�format�join)r+���rR���r,���r��s��� r����__repr__z_UnixReadPipeTransport.__repr__���s �������'�(���:���K�K��!�!�!�!� �]�� #��K�K� �"�"�"����(�$�,�(�(�)�)�)��4�:�{�D�9�9���:�!�h�&:�%�:��$�,� �(<�>��>�G��� $����I�&�&�&�&����F�#�#�#�#� �Z� #��K�K�������K�K��!�!�!��}�}�S�X�X�d�^�^�,�,�,r���c������������������4���� �t����������j��������|�j��������|�j��������������������}|r|�j�����������������������������|�������������d�S�|�j�������������������������������������������rt����������j ��������d|��������������d|�_ ��������|�j�����������������������������|�j���������������������|�j�����������������������������|�j��������j ���������������������|�j�����������������������������|�j��������d��������������d�S�#�t����������t ����������f$�r�Y�d�S�t"����������$�r!}|����������������������|d�������������Y�d�}~d�S�d�}~ww�xY�w)N�%r was closed by peerTz"Fatal read error on pipe transport)r!����readr�����max_sizer����� data_receivedr����� get_debugr���rR���r�����_remove_readerr�����eof_received�_call_connection_lostr����r����rM����_fatal_error)r+���r=���rW���s��� r���r����z"_UnixReadPipeTransport._read_ready ��s5����� G��7�4�<���7�7�D���� G���,�,�T�2�2�2�2�2��:�'�'�)�)��?��K� 7��>�>�>� $�� �� �)�)�$�,�7�7�7�� �$�$�T�^�%@�A�A�A�� �$�$�T�%?��F�F�F�F�F��� �!1�2�� �� �� ��D�D��� I�� I�� I����c�#G�H�H�H�H�H�H�H�H�H����� I���s����C��D�- D�6D�Dc������������������������|�������������������������������������sd�S�d|�_��������|�j�����������������������������|�j���������������������|�j�������������������������������������������rt ����������j��������d|��������������d�S�d�S�)NTz%r pauses reading)r����r����r����r��r����r��r����debugr��s��� r���� pause_readingz$_UnixReadPipeTransport.pause_reading��sq��������� � �� ��F����� �!�!�$�,�/�/�/��:���!�!�� 4��L�,�d�3�3�3�3�3� 4�� 4r���c������������������������|�j���������s|�j��������sd�S�d|�_��������|�j�����������������������������|�j��������|�j���������������������|�j�������������������������������������������rt����������j��������d|��������������d�S�d�S�)NFz%r resumes reading) r����r����r����r����r����r����r��r���r��r��s��� r����resume_readingz%_UnixReadPipeTransport.resume_reading#��sw�������=�� ���� ��F����� ���t�|�T�-=�>�>�>��:���!�!�� 5��L�-�t�4�4�4�4�4� 5�� 5r���c�����������������������||�_���������d�S�r ����r�����r+���rm���s��� r����set_protocolz#_UnixReadPipeTransport.set_protocol+��� ������!����r���c�����������������������|�j���������S�r ���r$��r��s��� r����get_protocolz#_UnixReadPipeTransport.get_protocol.��� �������~�r���c�����������������������|�j���������S�r ����r����r��s��� r���� is_closingz!_UnixReadPipeTransport.is_closing1��� �������}�r���c������������������B�����|�j���������s|����������������������d��������������d�S�d�S�r ���)r�����_closer��s��� r���r1���z_UnixReadPipeTransport.close4��s.�������}�� ��K�K������� �� r���c������������������v�����|�j����������1�|d|���t����������|���������������|�j���������������������������������������������d�S�d�S��Nzunclosed transport r/����r����r8���r1����r+����_warns��� r����__del__z_UnixReadPipeTransport.__del__8���L�������:�!��E�0��0�0�/�$�O�O�O�O��J���������"�!r����Fatal error on pipe transportc������������������0����t����������|t����������������������rG|j��������t����������j��������k����r2|�j�������������������������������������������rt ����������j��������d|�|d��������������n$|�j�����������������������������|||�|�j ��������d��������������|�� ��������������������|�������������d�S��Nz%r: %sT��exc_info)�message� exceptionr����rm���)rf���rM���rS����EIOr����r��r���r���call_exception_handlerr����r0���r+���rW���r=��s��� r���r��z#_UnixReadPipeTransport._fatal_error=��s��������s�G�$�$�� ���e�i�)?�)?��z�#�#�%�%�� E���X�t�W�t�D�D�D�D���J�-�-�"� �!� �N� /��/�� �� �� �� ���C�����r���c�����������������������d|�_���������|�j�����������������������������|�j���������������������|�j�����������������������������|�j��������|�������������d�S��NT)r����r����r��r����r����r���r+���rW���s��� r���r0��z_UnixReadPipeTransport._closeK��sB�������� �� �!�!�$�,�/�/�/�� ���T�7��=�=�=�=�=r���c����������������������� �|�j������������������������������|�������������|�j��������������������������������������������d�|�_��������d�|�_���������d�|�_��������d�S�#�|�j��������������������������������������������d�|�_��������d�|�_���������d�|�_��������w�xY�wr ����r�����connection_lostr����r1���r����rD��s��� r���r��z,_UnixReadPipeTransport._call_connection_lostP��������� ��N�*�*�3�/�/�/��J�������D�J�!�D�N��D�J�J�J��� �J�������D�J�!�D�N��D�J���������A��0A<r�����r8��)r����r����r����r��r)���r����r����r��r����r ��r"��r&��r)��r-��r1���r6���r7���r6��r��r0��r��r����r����s���@r���rj���rj������s(���������������H�/��/��/��/��/��/�<-��-��-� 6��6��6�-��-��-�*G��G��G�$4��4��4�5��5��5�"��"��"�����������������%�M��������� �������>��>��>� ������������r���rj���c���������������������������e�Zd�Zd��fd� Zd��Zd��Zd��Zd��Zd��Zd��Z d ��Z d ��Zd��Zd��Z d ��Zej��������fd�Zd��Zdd�Zdd�Zd��Z��xZS�)rr���Nc������������������p�����t���������������������������������������������||�������������||�j��������d<���||�_��������|�����������������������������������|�_��������||�_��������t������������������������|�_��������d|�_ ��������d|�_ ��������t����������j��������|�j��������������������j ��������}t����������j��������|������������}t����������j��������|������������}t����������j��������|������������} |s(|s&| s$d�|�_��������d�|�_��������d�|�_��������t%����������d�������������t����������j��������|�j��������d�������������|�j�����������������������������|�j��������j��������|��������������| s!|rOt.����������j�����������������������������d������������s0|�j�����������������������������|�j��������j��������|�j��������|�j���������������������|�(|�j�����������������������������t8����������j��������|d��������������d�S�d�S�)Nrl���r���Fz?Pipe transport is only for pipes, sockets and character devices�aix)r(���r)���r����r����rL���r����r����� bytearray�_buffer� _conn_lostr����r!���r����r����r����r����r����r����r#���r����r����r����r����r2����platform� startswithr����r����r ���r����)r+���r����rl���rm���rn���ro���r�����is_char�is_fifo� is_socketr-���s��� �r���r)���z _UnixWritePipeTransport.__init__]��s������� �������%�%�%�"���F���� ��{�{�}�}���!��� �{�{�������� ��x���%�%�-���,�t�$�$���-��%�%���M�$�'�'� ��� E�7�� E�i�� E��D�J��D�L�!�D�N���D��E��E�� E�� ����e�,�,�,�� ���T�^�;�T�B�B�B� ��� A��� A���)@�)@��)G�)G�� A��J� � ���!7�!%��t�/?� A�� A�� A�����J� � ��!E�!'�� /�� /�� /�� /�� /���r���c����������������������|�j���������j��������g}|�j���������|���������������������d�������������n|�j��������r|���������������������d�������������|���������������������d|�j������������������������t ����������|�j��������dd�������������}|�j����������|�t����������j ��������||�j��������t����������j��������������������}|r|���������������������d�������������n|���������������������d�������������|������������������������������������}|���������������������d|����������������n2|�j���������|���������������������d�������������n|���������������������d�������������d � ��������������������d ���������������������|������������������������S�)Nr��r��r��r��r��r��zbufsize=r ��r ��r��)r-���r����r����r��r����r����r ��r����r���r��r���EVENT_WRITE�get_write_buffer_sizer��r��)r+���rR���r,���r��r����s��� r���r��z _UnixWritePipeTransport.__repr__���sL�������'�(���:���K�K��!�!�!�!� �]�� #��K�K� �"�"�"����(�$�,�(�(�)�)�)��4�:�{�D�9�9���:�!�h�&:�%�:��$�,� �(=�?��?�G��� $����I�&�&�&�&����F�#�#�#��0�0�2�2�G��K�K�,�7�,�,�-�-�-�-� �Z� #��K�K�������K�K��!�!�!��}�}�S�X�X�d�^�^�,�,�,r���c������������������*�����t����������|�j��������������������S�r ���)�lenrO��r��s��� r���rX��z-_UnixWritePipeTransport.get_write_buffer_size���s�������4�<� � � r���c������������������������|�j��������������������������������������������rt����������j��������d|��������������|�j��������r#|����������������������t �������������������������������������d�S�|�������������������������������������d�S�)Nr��)r����r��r���rR���rO��r0���BrokenPipeErrorr��s��� r���r����z#_UnixWritePipeTransport._read_ready���sd�������:���!�!�� 7��K�/��6�6�6��<�� ��K�K��)�)�*�*�*�*�*��K�K�M�M�M�M�Mr���c�����������������������t����������|t����������������������rt����������|������������}|sd�S�|�j��������s|�j��������r;|�j��������t ����������j��������k����rt����������j��������d�������������|�xj��������dz ��c_��������d�S�|�j ��������s� �t����������j��������|�j��������|������������}nc#�t����������t����������f$�r�d}Y�nNt����������t ����������f$�r���t"����������$�r1}|�xj��������dz ��c_��������|����������������������|d�������������Y�d�}~d�S�d�}~ww�xY�w|t'����������|������������k����rd�S�|dk����rt����������|������������|d�����������}|�j�����������������������������|�j��������|�j���������������������|�xj ��������|z ��c_ ��������|�������������������������������������d�S�)Nz=pipe closed by peer or os.write(pipe, data) raised exception.r���r����#Fatal write error on pipe transport)rf���rN��� memoryviewrP��r����r����!LOG_THRESHOLD_FOR_CONNLOST_WRITESr����warningrO��r!����writer����r����r����r|���r}���r~���r��rZ��r�����_add_writer�_write_ready�_maybe_pause_protocol)r+���r=����nrW���s��� r���rb��z_UnixWritePipeTransport.write���s�������d�I�&�&�� $��d�#�#�D��� ��F��?�� �d�m�� ���)�"M�M�M���� H��I��I��I��O�O�q� �O�O��F��|�� D� ��H�T�\�4�0�0����#�%5�6�� �� �� ������ 1�2�� �� �� �� �� �� �� ����1�$����!�!�#�'L�M�M�M����������� ������C��I�I�~�~����Q���!�$�'�'����+���J�"�"�4�<��1B�C�C�C���������"�"�$�$�$�$�$s����:B��C5�*C5�&C0�0C5c����������������������� �t����������j��������|�j��������|�j��������������������}|t ����������|�j��������������������k����r�|�j��������������������������������������������|�j�����������������������������|�j���������������������|�������������������������������������|�j ��������r4|�j��������� ��������������������|�j���������������������|����������������������d��������������d�S�|dk����r|�j��������d�|�=�d�S�d�S�#�t����������t����������f$�r�Y�d�S�t����������t����������f$�r���t ����������$�ri}|�j��������������������������������������������|�xj��������dz ��c_��������|�j�����������������������������|�j���������������������|����������������������|d�������������Y�d�}~d�S�d�}~ww�xY�w)Nr���r���r^��)r!���rb��r����rO��rZ��r9���r�����_remove_writer�_maybe_resume_protocolr����r��r��r����r����r|���r}���r~���rP��r��)r+���rf��rW���s��� r���rd��z$_UnixWritePipeTransport._write_ready���s������ %�����t�|�4�4�A���C���%�%�%�%���"�"�$�$�$�� �)�)�$�,�7�7�7��+�+�-�-�-��=��5��J�-�-�d�l�;�;�;��.�.�t�4�4�4����Q����L��!��$�$�$�����)� �!1�2�� �� �� ��D�D��-�.�� �� �� ���� J�� J�� J��L��� � � ��O�O�q� �O�O�� �J�%�%�d�l�3�3�3����c�#H�I�I�I�I�I�I�I�I�I����� J���s����C��E-�*E-�AE(�(E-c�����������������������dS�rC��r���r��s��� r���� can_write_eofz%_UnixWritePipeTransport.can_write_eof�����������tr���c�����������������������|�j���������rd�S�d|�_���������|�j��������sA|�j�����������������������������|�j���������������������|�j�����������������������������|�j��������d��������������d�S�d�S�rC��)r����rO��r����r��r����r����r��r��s��� r���� write_eofz!_UnixWritePipeTransport.write_eof���sh�������=�� ��F��� ��|�� C��J�%�%�d�l�3�3�3��J� � ��!;�T�B�B�B�B�B� C�� Cr���c�����������������������||�_���������d�S�r ���r$��r%��s��� r���r&��z$_UnixWritePipeTransport.set_protocol���r'��r���c�����������������������|�j���������S�r ���r$��r��s��� r���r)��z$_UnixWritePipeTransport.get_protocol���r*��r���c�����������������������|�j���������S�r ���r,��r��s��� r���r-��z"_UnixWritePipeTransport.is_closing���r.��r���c������������������R�����|�j����������|�j��������s|�������������������������������������d�S�d�S�d�S�r ���)r����r����rn��r��s��� r���r1���z_UnixWritePipeTransport.close���s5�������:�!�$�-�!��N�N�������"�!�!�!r���c������������������v�����|�j����������1�|d|���t����������|���������������|�j���������������������������������������������d�S�d�S�r2��r3��r4��s��� r���r6��z_UnixWritePipeTransport.__del__���r7��r���c������������������0�����|�����������������������d��������������d�S�r ���)r0��r��s��� r����abortz_UnixWritePipeTransport.abort��s���������D�����r���r8��c����������������������t����������|t����������������������r2|�j�������������������������������������������rt ����������j��������d|�|d��������������n$|�j�����������������������������|||�|�j��������d��������������|����������������������|�������������d�S�r:��) rf���rM���r����r��r���r��r@��r����r0��rA��s��� r���r��z$_UnixWritePipeTransport._fatal_error��s��������c�7�#�#�� ��z�#�#�%�%�� E���X�t�W�t�D�D�D�D���J�-�-�"� �!� �N� /��/�� �� �� �� ���C�����r���c����������������������d|�_���������|�j��������r|�j�����������������������������|�j���������������������|�j��������������������������������������������|�j�����������������������������|�j���������������������|�j�����������������������������|�j��������|�������������d�S�rC��) r����rO��r����rh��r����r9���r��r����r��rD��s��� r���r0��z_UnixWritePipeTransport._close��sx�������� ��<�� 4��J�%�%�d�l�3�3�3��������� �!�!�$�,�/�/�/�� ���T�7��=�=�=�=�=r���c����������������������� �|�j������������������������������|�������������|�j��������������������������������������������d�|�_��������d�|�_���������d�|�_��������d�S�#�|�j��������������������������������������������d�|�_��������d�|�_���������d�|�_��������w�xY�wr ���rF��rD��s��� r���r��z-_UnixWritePipeTransport._call_connection_lost��rH��rI��r����rJ��r ���)r����r����r����r)���r��rX��r����rb��rd��rk��rn��r&��r)��r-��r1���r6���r7���r6��ru��r��r0��r��r����r����s���@r���rr���rr���Z��sH��������������#/��#/��#/��#/��#/��#/�J-��-��-�0!��!��!������!%��!%��!%�F%��%��%�8�����C��C��C�"��"��"���������������� �%�M��������� ������������>��>��>��>�������������r���rr���c�������������������������e�Zd�Zd��ZdS�)rx���c����������� �����������d�}|t�����������j��������k����r5t����������j�����������������������������d������������rt����������j����������������������\��}} �t����������j��������|f||||d|d�|��|�_��������|�D|� �����������������������������������t����������|�����������������������������������d|�������������|�j��������_��������d�}|�*|� �����������������������������������|� �����������������������������������d�S�d�S�#�|�)|� �����������������������������������|� �����������������������������������w�w�xY�w)NrM��F)r����r����r����r�����universal_newlinesr�����wb)� buffering) � subprocess�PIPEr2���rQ��rR��r����� socketpair�Popen�_procr1���r ���detachr����) r+���rV���r����r����r����r����r����r�����stdin_ws ��� r����_startz_UnixSubprocessTransport._start)��s��������J�O�#�#���(?�(?��(F�(F�#� �$�.�0�0�N�E�7� �#�)��E�!��v�f�#(�'�E��E�=C�E��E�D�J���"���� � � �#'����(8�(8�$�'�#R�#R�#R�� � ����"���� � � �� � �������#�"��w�"���� � � �� � ������#���s ���� A$C��-DN)r����r����r����r���r���r���r���rx���rx���'��s#�������������� �� �� �� �� r���rx���c��������������������<�����e�Zd�ZdZd��Zd��Zd��Zd��Zd��Zd��Z d��Z d S�) r���aH��Abstract base class for monitoring child processes. Objects derived from this class monitor a collection of subprocesses and report their termination or interruption by a signal. New callbacks are registered with .add_child_handler(). Starting a new process must be done within a 'with' block to allow the watcher to suspend its activity until the new process if fully registered (this is needed to prevent a race condition in some implementations). Example: with watcher: proc = subprocess.Popen("sleep 1") watcher.add_child_handler(proc.pid, callback) Notes: Implementations of this class must be thread-safe. Since child watcher objects may catch the SIGCHLD signal and call waitpid(-1), there should be only one active object per process. c�����������������������t�������������������������)a��Register a new child handler. Arrange for callback(pid, returncode, *args) to be called when process 'pid' terminates. Specifying another callback for the same process replaces the previous handler. Note: callback() must be thread-safe. ��NotImplementedError�r+���r����rU���rV���s��� r���ry���z&AbstractChildWatcher.add_child_handlerV��s�������"�#�#�#r���c�����������������������t�������������������������)z�Removes the handler for process 'pid'. The function returns True if the handler was successfully removed, False if there was nothing to remove.r����r+���r����s��� r����remove_child_handlerz)AbstractChildWatcher.remove_child_handlera��s�������"�#�#�#r���c�����������������������t�������������������������)z�Attach the watcher to an event loop. If the watcher was previously attached to an event loop, then it is first detached before attaching to the new loop. Note: loop may be None. r����r+���r����s��� r����attach_loopz AbstractChildWatcher.attach_loopi��s�������"�#�#�#r���c�����������������������t�������������������������)zlClose the watcher. This must be called to make sure that any underlying resource is freed. r���r��s��� r���r1���zAbstractChildWatcher.closes��s������ �"�#�#�#r���c�����������������������t�������������������������)z�Return ``True`` if the watcher is active and is used by the event loop. Return True if the watcher is installed and ready to handle process exit notifications. r���r��s��� r���rv���zAbstractChildWatcher.is_activez��s�������"�#�#�#r���c�����������������������t�������������������������)zdEnter the watcher's context and allow starting new processes This function must return selfr���r��s��� r���� __enter__zAbstractChildWatcher.__enter__���s�������"�#�#�#r���c�����������������������t�������������������������)zExit the watcher's contextr����r+����a�b�cs��� r����__exit__zAbstractChildWatcher.__exit__���s������!�#�#�#r���N)r����r����r����r����ry���r���r���r1���rv���r���r���r���r���r���r���r���?��s������������������, $�� $�� $�$��$��$�$��$��$�$��$��$�$��$��$�$��$��$�$��$��$��$��$r���r���c��������������������H�����e�Zd�ZdZd��Zd��Zd��Zd��Zd��Zd��Z d��Z d ��Zd ��ZdS�)r���a6��Child watcher implementation using Linux's pid file descriptors. This child watcher polls process file descriptors (pidfds) to await child process termination. In some respects, PidfdChildWatcher is a "Goldilocks" child watcher implementation. It doesn't require signals or threads, doesn't interfere with any processes launched outside the event loop, and scales linearly with the number of subprocesses launched by the event loop. The main disadvantage is that pidfds are specific to Linux, and only work on recent (5.3+) kernels. c������������������"�����d�|�_���������i�|�_��������d�S�r ����r����� _callbacksr��s��� r���r)���zPidfdChildWatcher.__init__������������ �����r���c�����������������������|�S�r ���r���r��s��� r���r���zPidfdChildWatcher.__enter__�����������r���c�����������������������d�S�r ���r���)r+����exc_type� exc_value� exc_tracebacks��� r���r���zPidfdChildWatcher.__exit__�����������r���c������������������F�����|�j���������d�uo|�j��������������������������������������������S�r ����r����� is_runningr��s��� r���rv���zPidfdChildWatcher.is_active����"�������z��%�A�$�*�*?�*?�*A�*A�Ar���c������������������0�����|�����������������������d��������������d�S�r ����r���r��s��� r���r1���zPidfdChildWatcher.close������������������r���c������������������6����|�j����������#|�!|�j��������rt����������j��������dt�����������������������|�j�������������������������������������������D�]4\��}}}|�j������������������������������|�������������t����������j��������|��������������5|�j��������� �����������������������������������||�_���������d�S��NzCA loop is being detached from a child watcher with pending handlers) r����r���r6���r7����RuntimeWarning�valuesr��r!���r1���r9���)r+���r�����pidfd�_s��� r���r���zPidfdChildWatcher.attach_loop���s��������:�!�d�l�t��l��M�=�� �� �� �� �?�1�1�3�3�� �� �K�E�1�a��J�%�%�e�,�,�,��H�U�O�O�O�O���������� � � r���c������������������������|�j������������������������������|������������}|�|d���������||f|�j���������|<���d�S�t����������j��������|������������}|�j�����������������������������||�j��������|�������������|||f|�j���������|<���d�S�r����)r���r\���r!���� pidfd_openr����r�����_do_wait)r+���r����rU���rV����existingr���s��� r���ry���z#PidfdChildWatcher.add_child_handler���s~�������?�&�&�s�+�+����#+�A�;��$�#>�D�O�C� � � ��M�#�&�&�E��J�"�"�5�$�-��=�=�=�#(�(�D�#8�D�O�C� � � r���c������������������R����|�j������������������������������|������������\��}}}|�j�����������������������������|������������� �t ����������j��������|d������������\��}}t ����������|������������}n'#�t����������$�r�d}t����������j ��������d|�������������Y�nw�xY�wt ����������j ��������|��������������|||g|�R����d�S�)Nr�������zJchild process pid %d exit status already read: will report returncode 255)r����popr����r��r!����waitpidr"����ChildProcessErrorr���ra��r1���)r+���r����r���rU���rV���r���r$���r����s��� r���r���zPidfdChildWatcher._do_wait���s������� $�� 3� 3�C� 8� 8���x��� �!�!�%�(�(�(� 8�� �3��*�*�I�A�v��0��7�7�J�J���!�� �� �� ���J��N�.�� �� �� �� �� � ����� ���������j�(�4�(�(�(�(�(�(s����A"��"!B�Bc������������������������ �|�j������������������������������|������������\��}}}n#�t����������$�r�Y�dS�w�xY�w|�j�����������������������������|�������������t����������j��������|�������������dS�)NFT)r���r���r`���r����r��r!���r1���)r+���r����r���r���s��� r���r���z&PidfdChildWatcher.remove_child_handler���sn������ ��/�-�-�c�2�2�K�E�1�a�a���� �� �� ��5�5� ����� �!�!�%�(�(�(� �������ts����!�� /�/N) r����r����r����r����r)���r���r���rv���r1���r���ry���r���r���r���r���r���r���r������s��������������� �� ����������� �� �� �B��B��B������ �� �� �9��9��9�)��)��)�&��������r���r���c��������������������8�����e�Zd�Zd��Zd��Zd��Zd��Zd��Zd��Zd��Z dS�) �BaseChildWatcherc������������������"�����d�|�_���������i�|�_��������d�S�r ���r���r��s��� r���r)���zBaseChildWatcher.__init__���r���r���c������������������0�����|�����������������������d��������������d�S�r ���r���r��s��� r���r1���zBaseChildWatcher.close���r���r���c������������������F�����|�j���������d�uo|�j��������������������������������������������S�r ���r���r��s��� r���rv���zBaseChildWatcher.is_active���r���r���c�����������������������t�������������������������r ���r���)r+����expected_pids��� r����_do_waitpidzBaseChildWatcher._do_waitpid����������!�#�#�#r���c�����������������������t�������������������������r ���r���r��s��� r����_do_waitpid_allz BaseChildWatcher._do_waitpid_all���r���r���c������������������8����|�j����������#|�!|�j��������rt����������j��������dt�����������������������|�j����������$|�j������������������������������t����������j���������������������||�_���������|�;|���������������������t����������j��������|�j ���������������������|�� �����������������������������������d�S�d�S�r���)r����r���r6���r7���r���r5���rI����SIGCHLDrZ���� _sig_chldr���r���s��� r���r���zBaseChildWatcher.attach_loop���s���������:�!�d�l�t��l��M�=�� �� �� � ��:�!��J�,�,�V�^�<�<�<��� ����#�#�F�N�D�N�C�C�C�� � � �"�"�"�"�"���r���c����������������������� �|��������������������������������������d�S�#�t����������t����������f$�r���t����������$�r(}|�j�����������������������������d|d��������������Y�d�}~d�S�d�}~ww�xY�w)N�$Unknown exception in SIGCHLD handler)r=��r>��)r���r|���r}���r~���r����r@��rD��s��� r���r���zBaseChildWatcher._sig_chld��s������� �� � �"�"�"�"�"���-�.�� �� �� ���� �� �� �� �J�-�-�A� �/��/�� �� �� �� �� �� �� �� �� ����� ���s������A�A�AN) r����r����r����r)���r1���rv���r���r���r���r���r���r���r���r���r������s�������������������������B��B��B�$��$��$�$��$��$�#��#��#�(��������r���r���c��������������������F�������e�Zd�ZdZ��fd�Zd��Zd��Zd��Zd��Zd��Z d��Z ��xZS�) r���ad��'Safe' child watcher implementation. This implementation avoids disrupting other code spawning processes by polling explicitly each process in the SIGCHLD handler instead of calling os.waitpid(-1). This is a safe solution but it has a significant overhead when handling a big number of children (O(n) each time SIGCHLD is raised) c������������������z������|�j���������������������������������������������t������������������������������������������������������������d�S�r ���)r���r9���r(���r1����r+���r-���s��� �r���r1���zSafeChildWatcher.close��s,�������������� ��� � �����r���c�����������������������|�S�r ���r���r��s��� r���r���zSafeChildWatcher.__enter__ ��r���r���c�����������������������d�S�r ���r���r���s��� r���r���zSafeChildWatcher.__exit__#��r���r���c������������������H�����||f|�j���������|<���|����������������������|�������������d�S�r ���)r���r���r���s��� r���ry���z"SafeChildWatcher.add_child_handler&��s/������ (�$�/������ ��������r���c������������������:����� �|�j���������|=�dS�#�t����������$�r�Y�dS�w�xY�w�NTF�r���r`���r���s��� r���r���z%SafeChildWatcher.remove_child_handler,���8������ ����$��4���� �� �� ��5�5� ���������� �c������������������^�����t����������|�j��������������������D�]}|����������������������|��������������d�S�r ����r4���r���r���r���s��� r���r���z SafeChildWatcher._do_waitpid_all3��s<���������(�(�� "�� "�C����S�!�!�!�!� "�� "r���c���������������������� �t����������j��������|t�����������j��������������������\��}}|dk����rd�S�t����������|������������}|�j�������������������������������������������rt ����������j��������d||�������������n)#�t����������$�r�|}d}t ����������j ��������d|�������������Y�nw�xY�w �|�j �����������������������������|������������\��}}�|||g|�R����d�S�#�t����������$�r7�|�j�������������������������������������������rt ����������j ��������d|d��������������Y�d�S�Y�d�S�w�xY�w)Nr����$process %s exited with returncode %sr����8Unknown child process pid %d, will report returncode 255�'Child watcher got an unexpected pid: %rTr;��) r!���r����WNOHANGr"���r����r��r���r��r���ra��r���r���r`���)r+���r���r����r$���r����rU���rV���s��� r���r���zSafeChildWatcher._do_waitpid8��so����� 7��*�\�2�:�>�>�K�C����a�x�x���/��7�7�J��z�#�#�%�%�� 7���C�)�:�7��7��7����!�� �� �� ���C��J��N�J�� �� �� �� �� � ����$ -�!�_�0�0��5�5�N�H�d�� �H�S�*�,�t�,�,�,�,�,�,����� 3�� 3�� 3���z�#�#�%�%�� 3���H�"�T�3��3��3��3��3��3��3� 3�� 3�� 3� 3���s#����"A+��+#B�B�B>��>:C?�>C?)r����r����r����r����r1���r���r���ry���r���r���r���r����r����s���@r���r���r�����s��������������������������������� �� �� �����������"��"��"� -�� -�� -�� -�� -�� -�� -r���r���c��������������������J�������e�Zd�ZdZ��fd�Z��fd�Zd��Zd��Zd��Zd��Z d��Z ��xZS�) r���aW��'Fast' child watcher implementation. This implementation reaps every terminated processes by calling os.waitpid(-1) directly, possibly breaking other code spawning processes and waiting for their termination. There is no noticeable overhead when handling a big number of children (O(1) each time a child terminates). c������������������������t������������������������������������������������������������t����������j����������������������|�_��������i�|�_��������d|�_��������d�S�r����)r(���r)���� threading�Lock�_lock�_zombies�_forksr���s��� �r���r)���zFastChildWatcher.__init__e��s:������� ���������^�%�%�� ��� �����r���c������������������������|�j���������������������������������������������|�j��������������������������������������������t������������������������������������������������������������d�S�r ���)r���r9���r���r(���r1���r���s��� �r���r1���zFastChildWatcher.closek��s@��������������� ������ ��� � �����r���c������������������h�����|�j���������5��|�xj��������dz ��c_��������|�cd�d�d��������������S�#�1�swxY�w�Y���d�S�)Nr���)r���r���r��s��� r���r���zFastChildWatcher.__enter__p��s������� �Z�� �� ��K�K�1��K�K�� �� �� �� �� �� �� �� �� �� �� �� ����� �� �� �� �� �� s����'�+�+c������������������ ����|�j���������5��|�xj��������dz��c_��������|�j��������s|�j��������s �d�d�d��������������d�S�t����������|�j��������������������}|�j��������������������������������������������d�d�d��������������n#�1�swxY�w�Y���t����������j��������d|�������������d�S�)Nr���z5Caught subprocesses termination from unknown pids: %s)r���r���r���rO���r9���r���ra��)r+���r���r���r����collateral_victimss��� r���r���zFastChildWatcher.__exit__v��s������� �Z�� "�� "��K�K�1��K�K��{�� �$�-�� �� "�� "�� "�� "�� "�� "�� "�� "��"%�T�]�!3�!3���M���!�!�!� "�� "�� "�� "�� "�� "�� "�� "�� "�� "�� "����� "�� "�� "�� "�� ��C�� �� �� �� �� s���� A.�-A.�.A2�5A2c������������������������|�j���������5�� �|�j�����������������������������|������������}n(#�t����������$�r�||f|�j��������|<���Y�d�d�d��������������d�S�w�xY�w �d�d�d��������������n#�1�swxY�w�Y����|||g|�R����d�S�r ���)r���r���r���r`���r���)r+���r����rU���rV���r����s��� r���ry���z"FastChildWatcher.add_child_handler���s���������Z�� �� � �!�]�.�.�s�3�3� � ���� �� �� �'/��~����$�� �� �� �� �� �� �� �� � ������ �� �� �� �� �� �� �� �� �� �� ����� �� �� �� �� ���j�(�4�(�(�(�(�(�(s0����A�%�A�A �A� A � A�A�!Ac������������������:����� �|�j���������|=�dS�#�t����������$�r�Y�dS�w�xY�wr���r���r���s��� r���r���z%FastChildWatcher.remove_child_handler���r���r���c������������������~���� � �t����������j��������dt�����������j��������������������\��}}|dk����rd�S�t����������|������������}n#�t����������$�r�Y�d�S�w�xY�w|�j��������5�� �|�j�����������������������������|������������\��}}|�j��������� ����������������������������������rt����������j��������d||�������������n_#�t����������$�rR�|�j ��������rF||�j��������|<���|�j��������� ����������������������������������rt����������j��������d||�������������Y�d�d�d����������������d�}Y�nw�xY�wd�d�d��������������n#�1�swxY�w�Y���|�t����������j��������d||�������������n �|||g|�R������=)NTr@���r���r���z,unknown process %s exited with returncode %sz8Caught subprocess termination from unknown pid: %d -> %d)r!���r���r���r"���r���r���r���r���r����r��r���r��r`���r���r���ra��)r+���r����r$���r����rU���rV���s��� r���r���z FastChildWatcher._do_waitpid_all���s������% 1� <� �j��R�Z�8�8���V� ��!�8�8��F�3�F�;�;� � ���%�� �� �� ���� �������� 6�� 6�6�%)�_�%8�%8��%=�%=�N�H�d���z�+�+�-�-��6���%K�%(�*�6��6��6���� �� $�� $�� $��{��!�-7�� �c�*��:�/�/�1�1��:�"�L��*>�),�j�:��:��:��!� 6�� 6�� 6�� 6�� 6�� 6�� 6�� $�H�H�H� $���� 6�� 6�� 6�� 6�� 6�� 6�� 6�� 6�� 6�� 6�� 6����� 6�� 6�� 6�� 6�&������ #�Z�1��1��1��1�����j�0�4�0�0�0�0�K% 1sR����"=�� A� A�D�B$�40D�$A D��.D�;D��=D�?D���D�D�D)r����r����r����r����r)���r1���r���r���ry���r���r���r����r����s���@r���r���r���[��s������������������������������������� ����� �� �� �)��)��)������(1��(1��(1��(1��(1��(1��(1r���r���c��������������������T�����e�Zd�ZdZd��Zd��Zd��Zd��Zd��Zd��Z d��Z d ��Zd ��Zd��Z d��Zd S�)r���a~��A watcher that doesn't require running loop in the main thread. This implementation registers a SIGCHLD signal handler on instantiation (which may conflict with other code that install own handler for this signal). The solution is safe but it has a significant overhead when handling a big number of processes (*O(n)* each time a SIGCHLD is received). c������������������"�����i�|�_���������d�|�_��������d�S�r ���)r����_saved_sighandlerr��s��� r���r)���zMultiLoopChildWatcher.__init__���s���������!%����r���c�����������������������|�j���������d�uS�r ���)r���r��s��� r���rv���zMultiLoopChildWatcher.is_active���s�������%�T�1�1r���c����������������������|�j���������������������������������������������|�j���������d�S�t����������j��������t����������j��������������������}||�j��������k����rt����������j��������d�������������n$t����������j��������t����������j��������|�j���������������������d�|�_��������d�S�)Nz+SIGCHLD handler was changed by outside code) r���r9���r���rI���� getsignalr���r���r���ra��)r+���rd���s��� r���r1���zMultiLoopChildWatcher.close���s|��������������!�)��F��"�6�>�2�2���d�n�$�$��N�H�I�I�I�I��M�&�.�$�*@�A�A�A�!%����r���c�����������������������|�S�r ���r���r��s��� r���r���zMultiLoopChildWatcher.__enter__���r���r���c�����������������������d�S�r ���r����r+���r����exc_val�exc_tbs��� r���r���zMultiLoopChildWatcher.__exit__���r���r���c������������������p�����t����������j����������������������}|||f|�j��������|<���|����������������������|�������������d�S�r ���)r����get_running_loopr���r���)r+���r����rU���rV���r����s��� r���ry���z'MultiLoopChildWatcher.add_child_handler���s?�������&�(�(�� $�h��5������ ��������r���c������������������:����� �|�j���������|=�dS�#�t����������$�r�Y�dS�w�xY�wr���r���r���s��� r���r���z*MultiLoopChildWatcher.remove_child_handler���r���r���c�����������������������|�j����������d�S�t����������j��������t����������j��������|�j��������������������|�_���������|�j����������%t ����������j��������d�������������t����������j��������|�_���������t����������j��������t����������j��������d�������������d�S�)NzaPrevious SIGCHLD handler was set by non-Python code, restore to default handler on watcher close.F)r���rI���r���r���r���ra��rc���rQ���r���s��� r���r���z!MultiLoopChildWatcher.attach_loop���sw������ ��!�-��F�!'��v�~�t�~�!N�!N����!�)��N��J�� K�� K�� K�%+�^�D�"�� ��F�N�E�2�2�2�2�2r���c������������������^�����t����������|�j��������������������D�]}|����������������������|��������������d�S�r ���r���r���s��� r���r���z%MultiLoopChildWatcher._do_waitpid_all��s<���������(�(�� "�� "�C����S�!�!�!�!� "�� "r���c������������������4���� �t����������j��������|t�����������j��������������������\��}}|dk����rd�S�t����������|������������}d}n+#�t����������$�r�|}d}t����������j��������d|�������������d}Y�nw�xY�w �|�j�����������������������������|������������\��}}}|� ����������������������������������rt����������j��������d||�������������d�S�|r*|� ����������������������������������rt����������j��������d||��������������|j��������|||g|�R����d�S�#�t����������$�r�t����������j��������d|d� �������������Y�d�S�w�xY�w) Nr���Tr���r���F�%Loop %r that handles pid %r is closedr���r���r;��)r!���r���r���r"���r���r���ra��r���r���� is_closedr��r��r����r`���) r+���r���r����r$���r����� debug_logr����rU���rV���s ��� r���r���z!MultiLoopChildWatcher._do_waitpid��s������ ��*�\�2�:�>�>�K�C����a�x�x���/��7�7�J��I�I���!�� �� �� ���C��J��N�J�� �� �� ���I�I�I� ���� L�#'�?�#6�#6�s�#;�#;� �D�(�D���~�~���� L���F��c�R�R�R�R�R���;����!1�!1��;��L�!G�!-�z�;��;��;�)��)�(�C��K�d�K�K�K�K�K�K����� /�� /�� /�� �N�D��� /�� /�� /�� /�� /�� /�� /� /���s!����">��%A&�%A&�*C2��2!D�Dc����������������������� �|��������������������������������������d�S�#�t����������t����������f$�r���t����������$�r�t ����������j��������dd��������������Y�d�S�w�xY�w)Nr���Tr;��)r���r|���r}���r~���r���ra��)r+���r���r���s��� r���r���zMultiLoopChildWatcher._sig_chld8��sy������ R�� � �"�"�"�"�"���-�.�� �� �� ���� R�� R�� R��N�A�D�Q�Q�Q�Q�Q�Q�Q� R���s������1A �A N)r����r����r����r����r)���rv���r1���r���r���ry���r���r���r���r���r���r���r���r���r���r������s��������������� �� �$&��&��&�2��2��2� &�� &�� &������ �� �� �����������3��3��3�""��"��"�#L��#L��#L�JR��R��R��R��Rr���r���c��������������������\�����e�Zd�ZdZd��Zd��Zd��Zd��Zd��Ze j ��������fd�Zd��Zd ��Z d ��Zd��ZdS�) r���aA��Threaded child watcher implementation. The watcher uses a thread per process for waiting for the process finish. It doesn't require subscription on POSIX signal but a thread creation is not free. The watcher has O(1) complexity, its performance doesn't depend on amount of spawn processes. c������������������F�����t����������j��������d������������|�_��������i�|�_��������d�S�r����)� itertoolsr�����_pid_counter�_threadsr��s��� r���r)���zThreadedChildWatcher.__init__N��s������%�O�A�.�.����� � � r���c�����������������������dS�rC��r���r��s��� r���rv���zThreadedChildWatcher.is_activeR��rl��r���c�����������������������d�S�r ���r���r��s��� r���r1���zThreadedChildWatcher.closeU��r���r���c�����������������������|�S�r ���r���r��s��� r���r���zThreadedChildWatcher.__enter__X��r���r���c�����������������������d�S�r ���r���r���s��� r���r���zThreadedChildWatcher.__exit__[��r���r���c�����������������������d��t����������|�j�������������������������������������������������������D���������������}|r�||�j����������d�t����������|���������������d�S�d�S�)Nc������������������:�����g�|�]}|�������������������������������������|��S�r���)�is_alive)�.0�threads��� r���� <listcomp>z0ThreadedChildWatcher.__del__.<locals>.<listcomp>_��s6�������)��)��)�f��o�o�'�'�)�6��)��)��)r���z0 has registered but not finished child processesr/���)r4���r��r���r-���r8���)r+���r5���threadss��� r���r6��zThreadedChildWatcher.__del__^��s}������)��)��T�]�-A�-A�-C�-C�(D�(D��)��)��)���� ��E�T�^�U�U�U�!�� �� �� �� �� �� � �� r���c������������������������t����������j����������������������}t����������j��������|�j��������dt����������|�j�����������������������||||fd�������������}||�j��������|<���|������������������������������������d�S�)Nzasyncio-waitpid-T)�target�namerV����daemon) r���r���r����Threadr����nextr��r���start)r+���r����rU���rV���r����r��s��� r���ry���z&ThreadedChildWatcher.add_child_handlerf��sp�������&�(�(���!��)9�'S�$�t�?P�:Q�:Q�'S�'S�(,�c�8�T�'B�)-�/��/��/���$�� �c���������r���c�����������������������dS�rC��r���r���s��� r���r���z)ThreadedChildWatcher.remove_child_handlero��s ��������tr���c�����������������������d�S�r ���r���r���s��� r���r���z ThreadedChildWatcher.attach_loopu��r���r���c���������������������� �t����������j��������|d������������\��}}t����������|������������}|�����������������������������������rt ����������j��������d||�������������n)#�t����������$�r�|}d}t ����������j��������d|�������������Y�nw�xY�w|�����������������������������������rt ����������j��������d||�������������n�|j ��������|||g|�R����|�j �����������������������������|�������������d�S�)Nr���r���r���r���r���)r!���r���r"���r��r���r��r���ra��r���r����r��r���)r+���r����r���rU���rV���r����r$���r����s��� r���r���z ThreadedChildWatcher._do_waitpidx��s����� 7��*�\�1�5�5�K�C���0��7�7�J��~�~���� 7���C�)�:�7��7��7����!�� �� �� ���C��J��N�J�� �� �� �� �� � ������>�>���� H��N�B�D�#�N�N�N�N�%�D�%�h��Z�G�$�G�G�G�G�� ���,�'�'�'�'�'s����A��#A:�9A:N)r����r����r����r����r)���rv���r1���r���r���r6���r7���r6��ry���r���r���r���r���r���r���r���r���A��s��������������� �� ����������� �� �� ������ �� �� ��%�M������������������� �� �� �(��(��(��(��(r���r���c��������������������B�������e�Zd�ZdZeZ��fd�Zd��Z��fd�Zd��Z d��Z ��xZS�)�_UnixDefaultEventLoopPolicyz:UNIX event loop policy with a watcher for child processes.c������������������V������t������������������������������������������������������������d�|�_��������d�S�r ���)r(���r)����_watcherr���s��� �r���r)���z$_UnixDefaultEventLoopPolicy.__init__���s$������� ���������� � � r���c�����������������������t�����������j��������5��|�j���������t������������������������|�_��������d�d�d��������������d�S�#�1�swxY�w�Y���d�S�r ���)r���r���r ��r���r��s��� r���� _init_watcherz)_UnixDefaultEventLoopPolicy._init_watcher���s������� �\�� 7�� 7��}�$� 4� 6� 6�� � 7�� 7�� 7�� 7�� 7�� 7�� 7�� 7�� 7�� 7�� 7�� 7����� 7�� 7�� 7�� 7�� 7�� 7s����5�9�9c�������������������������t���������������������������������������������|�������������|�j���������Bt����������j����������������������t����������j����������������������u�r|�j�����������������������������|�������������dS�dS�dS�)z�Set the event loop. As a side effect, if a child watcher was set before, then calling .set_event_loop() from the main thread will call .attach_loop(loop) on the child watcher. N)r(����set_event_loopr ��r����current_thread�main_threadr���)r+���r����r-���s��� �r���r$��z*_UnixDefaultEventLoopPolicy.set_event_loop���sl�������� �����t�$�$�$��M�%��(�*�*�i�.C�.E�.E�E�E��M�%�%�d�+�+�+�+�+�� &�%�E�Er���c������������������F�����|�j����������|�������������������������������������|�j���������S�)z~Get the watcher for child processes. If not yet set, a ThreadedChildWatcher object is automatically created. )r ��r"��r��s��� r���ru���z-_UnixDefaultEventLoopPolicy.get_child_watcher���s&������ ��=� ���� � � ��}�r���c������������������T�����|�j����������|�j���������������������������������������������||�_���������dS�)z$Set the watcher for child processes.N)r ��r1���)r+���r����s��� r����set_child_watcherz-_UnixDefaultEventLoopPolicy.set_child_watcher���s+������ ��=�$��M���!�!�!��� � � r���)r����r����r����r����r&���� _loop_factoryr)���r"��r$��ru���r)��r����r����s���@r���r��r�����s����������������D�D�*�M����������7��7��7� ,��,��,��,��,������ �� �� �� �� �� �� r���r��)3r����rS���r����r��r!���r��rI���r����r����r~��r2���r���r6�����r���r���r���r���r���r ���r ���r���r���r ����logr����__all__rQ���ImportErrorr���r"����BaseSelectorEventLoopr&���� ReadTransportrj����_FlowControlMixin�WriteTransportrr����BaseSubprocessTransportrx���r���r���r���r���r���r���r����BaseDefaultEventLoopPolicyr��r���r���r���r���r����<module>r5�����s�����8��8������� � � � ���������� � � � ���������� � � � �� � � � ��������������� � � � ������������������������������������������������������������������������������������������������������������������������������������������������������<�7��� �+�C� D� D�D� �� �� � �����N"��N"��N"��N"��N"�_�B��N"��N"��N"�bM��M��M��M��M�Z�5��M��M��M�`J��J��J��J��J�j�:�(�7�J��J��J�Z �� �� �� �� ��F�� �� �� �0L$��L$��L$��L$��L$��L$��L$��L$�^K��K��K��K��K�,��K��K��K�\2��2��2��2��2�+��2��2��2�jG-��G-��G-��G-��G-�'��G-��G-��G-�Tf1��f1��f1��f1��f1�'��f1��f1��f1�RzR��zR��zR��zR��zR�0��zR��zR��zR�zO(��O(��O(��O(��O(�/��O(��O(��O(�d- ��- ��- ��- ��- �&�"C��- ��- ��- �`�+���4������r���