����JFIF���������
1#@!#!123s
D7net
Home
Console
Upload
information
Create File
Create Folder
About
Tools
:
/
proc
/
self
/
root
/
opt
/
alt
/
python35
/
lib64
/
python3.5
/
asyncio
/
__pycache__
/
Filename :
unix_events.cpython-35.pyc
back
Copy
��Yf����������������� ���@���s���d��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 �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�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�d�d�d�d�d�g�Z�e�j�d�k�rbe�d�����d�d����Z�y �e�j�Z�Wn�e�k �r�d�d����Z�Yn�XGd�d����d�e�j���Z �e!�e�d���r�d�d����Z"�n�d�d�l#�Z#�d �d����Z"�Gd!�d"����d"�e�j$���Z%�Gd#�d$����d$�e�j&�e�j'���Z(�e!�e�d%���r>e�j)�Z*�n�d�d�l#�Z#�d&�d'����Z*�Gd(�d)����d)�e�j+���Z,�Gd*�d����d���Z-�Gd+�d,����d,�e-���Z.�Gd-�d����d�e.���Z/�Gd.�d����d�e.���Z0�Gd/�d0����d0�e�j1���Z2�e �Z3�e2�Z4�d�S)1z2Selector event loop for Unix with signal handling.�����N����)�base_events)�base_subprocess)�compat)� constants)� coroutines)�events)�futures)�selector_events)� selectors)� transports)� coroutine)�logger�SelectorEventLoop�AbstractChildWatcher�SafeChildWatcher�FastChildWatcher�DefaultEventLoopPolicy�win32z+Signals are not really supported on Windowsc�������������C���s���d�S)zDummy signal handler.N��)�signum�framer���r����8/opt/alt/python35/lib64/python3.5/asyncio/unix_events.py�_sighandler_noop%���s����r���c�������������C���s���|��S)Nr���)�pathr���r���r����<lambda>.���s����r���c������������ �������s��e��Z�d��Z�d�Z�d����f�d�d���Z�d�d����Z����f�d�d����Z�d �d ����Z�d�d����Z�d �d����Z �d�d����Z �d�d����Z�d�d�d�d���Z�d�d�d�d���Z �e�d�d�d�����Z�d�d����Z�e�d�d�d�d�d�d�d�d�����Z�e�d�d�d�d �d!�d�d�d"�d#����Z����S)$�_UnixSelectorEventLoopzdUnix event loop. Adds signal handling and UNIX Domain Socket support to SelectorEventLoop. Nc����������������s���t�����j�|���i��|��_�d��S)N)�super�__init__�_signal_handlers)�self�selector)� __class__r���r���r���7���s����z_UnixSelectorEventLoop.__init__c�������������C���s ���t��j����S)N)�socketZ socketpair)r ���r���r���r����_socketpair;���s����z"_UnixSelectorEventLoop._socketpairc����������������s8���t�����j����x$�t�|��j���D]�}�|��j�|���q�Wd��S)N)r����close�listr����remove_signal_handler)r ����sig)r"���r���r���r%���>���s���� z_UnixSelectorEventLoop.closec�������������C���s+���x$�|�D]�}�|�s�q�|��j��|���q�Wd��S)N)�_handle_signal)r ����datar���r���r���r����_process_self_dataC���s���� z)_UnixSelectorEventLoop._process_self_datac����������+���G���s���t��j�|���s�t��j�|���r*�t�d�����|��j�|���|��j����y�t�j�|��j�j ������Wn=�t �t�f�k �r��}�z�t�t �|�������WYd�d�}�~�Xn�Xt�j�|�|�|����}�|�|��j�|�<y$�t�j�|�t���t�j�|�d���Wn��t�k �r�}�z��|��j�|�=|��j�sXy�t�j�d���Wn;�t �t�f�k �rW}�z�t�j�d�|���WYd�d�}�~�Xn�X|�j�t�j�k�r�t�d�j�|�������n����WYd�d�}�~�Xn�Xd�S)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()NFr���zset_wakeup_fd(-1) failed: %szsig {} cannot be caught���)r���ZiscoroutineZiscoroutinefunction� TypeError� _check_signalZ _check_closed�signal� set_wakeup_fdZ_csock�fileno� ValueError�OSError�RuntimeError�strr���ZHandler���r����siginterruptr����info�errno�EINVAL�format)r ���r(����callback�args�exc�handleZnexcr���r���r����add_signal_handlerJ���s0���� % #z)_UnixSelectorEventLoop.add_signal_handlerc�������������C���sL���|��j��j�|���}�|�d�k�r"�d�S|�j�r;�|��j�|���n �|��j�|���d�S)z2Internal helper that is the actual signal handler.N)r����getZ _cancelledr'���Z_add_callback_signalsafe)r ���r(���r>���r���r���r���r)���w���s���� z%_UnixSelectorEventLoop._handle_signalc����������&���C���s��|��j��|���y�|��j�|�=Wn�t�k �r3�d�SYn�X|�t�j�k�rO�t�j�}�n �t�j�}�y�t�j�|�|���WnR�t�k �r��}�z2�|�j�t�j �k�r��t �d�j�|�������n����WYd�d�}�~�Xn�X|��j�sy�t�j�d���Wn;�t �t�f�k �r}�z�t�j�d�|���WYd�d�}�~�Xn�Xd�S)zwRemove a handler for a signal. UNIX only. Return True if a signal handler was removed, False if not. Fzsig {} cannot be caughtNr���zset_wakeup_fd(-1) failed: %sTr,���)r.���r����KeyErrorr/����SIGINT�default_int_handler�SIG_DFLr3���r8���r9���r4���r:���r0���r2���r���r7���)r ���r(���Zhandlerr=���r���r���r���r'�������s(���� #z,_UnixSelectorEventLoop.remove_signal_handlerc�������������C���sb���t��|�t���s$�t�d�j�|�������d�|�k�o>�t�j�k��n�s^�t�d�j�|�t�j�������d�S)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 {!r}r���zsig {} out of range(1, {})N)� isinstance�intr-���r:���r/����NSIGr2���)r ���r(���r���r���r���r.�������s ����z$_UnixSelectorEventLoop._check_signalc�������������C���s���t��|��|�|�|�|���S)N)�_UnixReadPipeTransport)r ����pipe�protocol�waiter�extrar���r���r����_make_read_pipe_transport����s����z0_UnixSelectorEventLoop._make_read_pipe_transportc�������������C���s���t��|��|�|�|�|���S)N)�_UnixWritePipeTransport)r ���rI���rJ���rK���rL���r���r���r����_make_write_pipe_transport����s����z1_UnixSelectorEventLoop._make_write_pipe_transportc �������������k���s����t��j�������} �|��j����}�t�|��|�|�|�|�|�|�|�d�|�d�|�| ��}�| �j�|�j����|��j�|���y �|�Ed��HWn+�t�k �r��} �z�| �}�WYd��d��} �~ �Xn�Xd��}�|�d��k �r��|�j����|�j ����Ed��H|���Wd��QRX|�S)NrK���rL���) r����get_child_watcherZ create_future�_UnixSubprocessTransport�add_child_handlerZget_pid�_child_watcher_callback� Exceptionr%���Z_wait)r ���rJ���r<����shell�stdin�stdout�stderr�bufsizerL����kwargs�watcherrK����transpr=����errr���r���r����_make_subprocess_transport����s$���� z1_UnixSelectorEventLoop._make_subprocess_transportc�������������C���s���|��j��|�j�|���d��S)N)Zcall_soon_threadsafeZ_process_exited)r ����pid� returncoder\���r���r���r���rS�������s����z._UnixSelectorEventLoop._child_watcher_callback�ssl�sock�server_hostnamec������������c���sc��|�d��k�s!�t��|�t���s!�t���|�rB�|�d��k�rZ�t�d�����n�|�d��k �rZ�t�d�����|�d��k �r��|�d��k �r~�t�d�����t�j�t�j�t�j�d���}�y&�|�j�d���|��j�|�|���Ed��HWq6|�j �������Yq6Xn\�|�d��k�r��t�d�����|�j �t�j�k�st�j�|���r)t�d�j �|�������|�j�d���|��j�|�|�|�|���Ed��H\�}�}�|�|�f�S)Nz/you have to pass server_hostname when using sslz+server_hostname is only meaningful with sslz3path and sock can not be specified at the same timer���Fzno path and sock were specifiedz2A UNIX Domain Stream Socket was expected, got {!r})rE���r5����AssertionErrorr2���r#����AF_UNIX�SOCK_STREAM�setblockingZsock_connectr%����familyr����_is_stream_socketr:���Z_create_connection_transport)r ����protocol_factoryr���ra���rb���rc���� transportrJ���r���r���r����create_unix_connection����s:����! z-_UnixSelectorEventLoop.create_unix_connection�backlog�d���c������ ���!���C���s��t��|�t���r�t�d�����|�d��k �r�|�d��k �r?�t�d�����t�|���}�t�j�t�j�t�j���}�|�d�d �k�r��y,�t�j �t �j�|���j���r��t �j�|���WnI�t �k �r��Yn8�t�k �r��}�z�t�j�d�|�|���WYd��d��}�~�Xn�Xy�|�j�|���Wq�t�k �ri}�zK�|�j����|�j�t�j�k�rTd�j�|���}�t�t�j�|���d����n����WYd��d��}�~�Xq�|�j�������Yq�XnO�|�d��k�r�t�d�����|�j�t�j�k�s�t�j�|���r�t�d�j�|�������t�j�|��|�g���} �|�j�|���|�j�d ���|��j�|�|�|�| ���| �S)Nz*ssl argument must be an SSLContext or Nonez3path and sock can not be specified at the same timer�����z2Unable to check or remove stale UNIX socket %r: %rzAddress {!r} is already in usez-path was not specified, and no sock specifiedz2A UNIX Domain Stream Socket was expected, got {!r}F)r���ro���)rE����boolr-���r2����_fspathr#���re���rf����stat�S_ISSOCK�os�st_mode�remove�FileNotFoundErrorr3���r����errorZbindr%���r8���Z EADDRINUSEr:���rh���r���ri���ZServerZlistenrg���Z_start_serving) r ���rj���r���rb���rm���ra���r]���r=����msgZserverr���r���r����create_unix_server����sP���� & z)_UnixSelectorEventLoop.create_unix_server)�__name__� __module__�__qualname__�__doc__r���r$���r%���r+���r?���r)���r'���r.���rM���rO���r ���r^���rS���rl���rz���r���r���)r"���r���r���1���s,���- %r����set_blockingc�������������C���s���t��j�|��d���d��S)NF)rt���r���)�fdr���r���r����_set_nonblocking9��s����r����c�������������C���s<���t��j��|��t��j���}�|�t�j�B}�t��j��|��t��j�|���d��S)N)�fcntlZF_GETFLrt���� O_NONBLOCKZF_SETFL)r�����flagsr���r���r���r����>��s���� c�������������������s����e��Z�d��Z�d�Z�d�d����f�d�d���Z�d�d����Z�d�d ����Z�d �d����Z�d�d ����Z�d�d����Z �d�d����Z �d�d����Z�d�d����Z�e �j�r��d�d����Z�d�d�d���Z�d�d����Z�d�d����Z����S) rH�������i���Nc����������������s*��t�����j�|���|�|��j�d�<|�|��_�|�|��_�|�j����|��_�|�|��_�d�|��_�t �j �|��j���j�}�t�j �|���p��t�j�|���p��t�j�|���s��d��|��_�d��|��_�d��|��_�t�d�����t�|��j���|��j�j�|��j�j�|����|��j�j�|��j�j�|��j�|��j���|�d��k �r&|��j�j�t�j�|�d����d��S)NrI���Fz)Pipe transport is for pipes/sockets only.)r���r����_extra�_loop�_piper1����_fileno� _protocol�_closingrt����fstatru���rr����S_ISFIFOrs����S_ISCHRr2���r����� call_soon�connection_made�_add_reader�_read_readyr ����_set_result_unless_cancelled)r ����looprI���rJ���rK���rL����mode)r"���r���r���r���H��s,���� z_UnixReadPipeTransport.__init__c�������������C���s��|��j��j�g�}�|��j�d��k�r.�|�j�d���n�|��j�rD�|�j�d���|�j�d�|��j���t�|��j�d�d����}�|��j�d��k �r��|�d��k �r��t�j �|�|��j�t �j���}�|�r��|�j�d���q��|�j�d���n,�|��j�d��k �r��|�j�d���n �|�j�d���d�d �j�|���S) N�closed�closingzfd=%s� _selector�polling�idle�openz<%s>� ) r"���r{���r�����appendr����r�����getattrr����r ����_test_selector_eventr���Z EVENT_READ�join)r ���r7���r!���r����r���r���r����__repr__e��s$���� z_UnixReadPipeTransport.__repr__c�������������C���s����y�t��j�|��j�|��j���}�WnL�t�t�f�k �r6�Yn��t�k �rj�}�z�|��j�|�d���WYd��d��}�~�Xn��X|�r��|��j�j �|���ng�|��j �j����r��t�j �d�|����d�|��_�|��j �j�|��j���|��j �j�|��j�j���|��j �j�|��j�d����d��S)Nz"Fatal read error on pipe transportz%r was closed by peerT)rt����readr�����max_size�BlockingIOError�InterruptedErrorr3����_fatal_errorr����Z data_receivedr����� get_debugr���r7���r�����_remove_readerr����Zeof_received�_call_connection_lost)r ���r*���r=���r���r���r���r����{��s����# z"_UnixReadPipeTransport._read_readyc�������������C���s���|��j��j�|��j���d��S)N)r����r����r����)r ���r���r���r���� pause_reading���s����z$_UnixReadPipeTransport.pause_readingc�������������C���s���|��j��j�|��j�|��j���d��S)N)r����r����r����r����)r ���r���r���r����resume_reading���s����z%_UnixReadPipeTransport.resume_readingc�������������C���s ���|�|��_��d��S)N)r����)r ���rJ���r���r���r����set_protocol���s����z#_UnixReadPipeTransport.set_protocolc�������������C���s���|��j��S)N)r����)r ���r���r���r����get_protocol���s����z#_UnixReadPipeTransport.get_protocolc�������������C���s���|��j��S)N)r����)r ���r���r���r���� is_closing���s����z!_UnixReadPipeTransport.is_closingc�������������C���s���|��j��s�|��j�d����d��S)N)r�����_close)r ���r���r���r���r%������s���� z_UnixReadPipeTransport.closec�������������C���s4���|��j��d��k �r0�t�j�d�|��t���|��j��j����d��S)Nzunclosed transport %r)r�����warnings�warn�ResourceWarningr%���)r ���r���r���r����__del__���s����z_UnixReadPipeTransport.__del__zFatal error on pipe transportc���������� ���C���s����t��|�t���rL�|�j�t�j�k�rL�|��j�j����rw�t�j�d�|��|�d�d��n+�|��j�j�d�|�d�|�d�|��d�|��j �i���|��j �|���d��S)Nz%r: %s�exc_infoT�message� exceptionrk���rJ���)rE���r3���r8���ZEIOr����r����r����debug�call_exception_handlerr����r����)r ���r=���r����r���r���r���r�������s����! z#_UnixReadPipeTransport._fatal_errorc�������������C���s6���d�|��_��|��j�j�|��j���|��j�j�|��j�|���d��S)NT)r����r����r����r����r����r����)r ���r=���r���r���r���r�������s���� z_UnixReadPipeTransport._closec�������������C���sD���z�|��j��j�|���Wd��|��j�j����d��|��_�d��|��_��d��|��_�Xd��S)N)r�����connection_lostr����r%���r����)r ���r=���r���r���r���r�������s���� z,_UnixReadPipeTransport._call_connection_losti���)r{���r|���r}���r����r���r����r����r����r����r����r����r����r%���r����PY34r����r����r����r����r���r���)r"���r���rH���D��s��� rH���c�������������������s����e��Z�d��Z�d�d����f�d�d���Z�d�d����Z�d�d����Z�d�d ����Z�d �d����Z�d�d ����Z�d�d����Z �d�d����Z �d�d����Z�d�d����Z�d�d����Z �d�d����Z�e�j�r��d�d����Z�d�d����Z�d�d�d ���Z�d�d!�d"���Z�d#�d$����Z����S)%rN���Nc������� ���������sj��t�����j�|�|���|�|��j�d�<|�|��_�|�j����|��_�|�|��_�t����|��_�d�|��_ �d�|��_ �t�j�|��j���j �}�t�j�|���}�t�j�|���}�t�j�|���} �|�p��|�p��| �s��d��|��_�d��|��_�d��|��_�t�d�����t�|��j���|��j�j�|��j�j�|����| �s|�rAt�j�j�d���rA|��j�j�|��j�j�|��j�|��j���|�d��k �rf|��j�j�t�j�|�d����d��S)NrI���r���Fz?Pipe transport is only for pipes, sockets and character devices�aix)r���r���r����r����r1���r����r����� bytearray�_buffer� _conn_lostr����rt���r����ru���rr���r����r����rs���r2���r����r����r����r�����sys�platform� startswithr����r����r ���r����) r ���r����rI���rJ���rK���rL���r����Zis_charZis_fifoZ is_socket)r"���r���r���r������s2���� z _UnixWritePipeTransport.__init__c�������������C���s#��|��j��j�g�}�|��j�d��k�r.�|�j�d���n�|��j�rD�|�j�d���|�j�d�|��j���t�|��j�d�d����}�|��j�d��k �r��|�d��k �r��t�j �|�|��j�t �j���}�|�r��|�j�d���n �|�j�d���|��j����}�|�j�d�|���n,�|��j�d��k �r|�j�d���n �|�j�d���d �d �j �|���S)Nr����r����zfd=%sr����r����r����z bufsize=%sr����z<%s>r����)r"���r{���r����r����r����r����r����r����r ���r����r���ZEVENT_WRITE�get_write_buffer_sizer����)r ���r7���r!���r����rY���r���r���r���r�������s(���� z _UnixWritePipeTransport.__repr__c�������������C���s ���t��|��j���S)N)�lenr����)r ���r���r���r���r������s����z-_UnixWritePipeTransport.get_write_buffer_sizec�������������C���sI���|��j��j����r�t�j�d�|����|��j�r;�|��j�t������n �|��j����d��S)Nz%r was closed by peer)r����r����r���r7���r����r�����BrokenPipeError)r ���r���r���r���r���� ��s ���� z#_UnixWritePipeTransport._read_readyc�������������C���s���t��|�t�t�t�f���s*�t�t�|�������t��|�t���rE�t�|���}�|�sO�d��S|��j�sa�|��j�r��|��j�t�j �k�r��t �j�d���|��j�d�7_�d��S|��j�sny�t �j�|��j�|���}�Wne�t�t�f�k �r��d�}�YnH�t�k �r}�z(�|��j�d�7_�|��j�|�d���d��SWYd��d��}�~�Xn�X|�t�|���k�r3d��S|�d�k�rUt�|���|�d����}�|��j�j�|��j�|��j���|��j�|�7_�|��j����d��S)Nz=pipe closed by peer or os.write(pipe, data) raised exception.r���r���z#Fatal write error on pipe transport)rE����bytesr����� memoryviewrd����reprr����r����r���Z!LOG_THRESHOLD_FOR_CONNLOST_WRITESr����warningr����rt����writer����r����r����rT���r����r����r����Z_add_writer�_write_readyZ_maybe_pause_protocol)r ���r*����nr=���r���r���r���r������s4����* z_UnixWritePipeTransport.writec�������������C���s;��|��j��s�t�d�����y�t�j�|��j�|��j����}�Wn{�t�t�f�k �rK�Yn��t�k �r��}�zD�|��j��j����|��j �d�7_ �|��j �j�|��j���|��j�|�d���WYd��d��}�~�Xn��X|�t �|��j����k�r|��j��j����|��j �j�|��j���|��j����|��j�r|��j �j�|��j���|��j�d����d��S|�d�k�r7|��j��d��|���=d��S)NzData should not be emptyr���z#Fatal write error on pipe transportr���)r����rd���rt���r����r����r����r����rT����clearr����r�����_remove_writerr����r����Z_maybe_resume_protocolr����r����r����)r ���r����r=���r���r���r���r����4��s(���� # z$_UnixWritePipeTransport._write_readyc�������������C���s���d�S)NTr���)r ���r���r���r���� can_write_eofN��s����z%_UnixWritePipeTransport.can_write_eofc�������������C���s[���|��j��r �d��S|��j�s�t���d�|��_��|��j�sW�|��j�j�|��j���|��j�j�|��j�d����d��S)NT) r����r����rd���r����r����r����r����r����r����)r ���r���r���r���� write_eofQ��s���� z!_UnixWritePipeTransport.write_eofc�������������C���s ���|�|��_��d��S)N)r����)r ���rJ���r���r���r���r����Z��s����z$_UnixWritePipeTransport.set_protocolc�������������C���s���|��j��S)N)r����)r ���r���r���r���r����]��s����z$_UnixWritePipeTransport.get_protocolc�������������C���s���|��j��S)N)r����)r ���r���r���r���r����`��s����z"_UnixWritePipeTransport.is_closingc�������������C���s'���|��j��d��k �r#�|��j�r#�|��j����d��S)N)r����r����r����)r ���r���r���r���r%���c��s����z_UnixWritePipeTransport.closec�������������C���s4���|��j��d��k �r0�t�j�d�|��t���|��j��j����d��S)Nzunclosed transport %r)r����r����r����r����r%���)r ���r���r���r���r����l��s����z_UnixWritePipeTransport.__del__c�������������C���s���|��j��d����d��S)N)r����)r ���r���r���r����abortq��s����z_UnixWritePipeTransport.abortzFatal error on pipe transportc���������� ���C���sy���t��|�t�j���r=�|��j�j����rh�t�j�d�|��|�d�d��n+�|��j�j�d�|�d�|�d�|��d�|��j�i���|��j �|���d��S)Nz%r: %sr����Tr����r����rk���rJ���) rE���r���Z_FATAL_ERROR_IGNOREr����r����r���r����r����r����r����)r ���r=���r����r���r���r���r����t��s���� z$_UnixWritePipeTransport._fatal_errorc�������������C���s_���d�|��_��|��j�r%�|��j�j�|��j���|��j�j����|��j�j�|��j���|��j�j�|��j�|���d��S)NT) r����r����r����r����r����r����r����r����r����)r ���r=���r���r���r���r�������s���� z_UnixWritePipeTransport._closec�������������C���sD���z�|��j��j�|���Wd��|��j�j����d��|��_�d��|��_��d��|��_�Xd��S)N)r����r����r����r%���r����)r ���r=���r���r���r���r�������s���� z-_UnixWritePipeTransport._call_connection_lost)r{���r|���r}���r���r����r����r����r����r����r����r����r����r����r����r%���r���r����r����r����r����r����r����r���r���)r"���r���rN������s$���% ! rN����set_inheritablec�������������C���si���t��t�d�d���}�t�j�|��t�j���}�|�sJ�t�j�|��t�j�|�|�B��n�t�j�|��t�j�|�|�@��d��S)NZ FD_CLOEXECr���)r����r����ZF_GETFDZF_SETFD)r����ZinheritableZcloexec_flag�oldr���r���r����_set_inheritable���s ����r����c���������������@���s���e��Z�d��Z�d�d����Z�d�S)rQ���c������� ������K���s����d��}�|�t��j�k�r=�|��j�j����\�}�}�t�|�j����d���t��j�|�d�|�d�|�d�|�d�|�d�d�d�|�|��|��_�|�d��k �r��|�j����t �|�j ����d�d �|��|��j�_�d��S) NFrU���rV���rW���rX���Zuniversal_newlinesrY����wb� buffering)� subprocess�PIPEr����r$���r����r1����Popen�_procr%���r�����detachrV���) r ���r<���rU���rV���rW���rX���rY���rZ���Zstdin_wr���r���r����_start���s���� z_UnixSubprocessTransport._startN)r{���r|���r}���r����r���r���r���r���rQ������s���rQ���c���������������@���s^���e��Z�d��Z�d�Z�d�d����Z�d�d����Z�d�d����Z�d�d ����Z�d �d����Z�d�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�������������G���s ���t�������d�S)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. N)�NotImplementedError)r ���r_���r;���r<���r���r���r���rR������s���� z&AbstractChildWatcher.add_child_handlerc�������������C���s ���t�������d�S)z�Removes the handler for process 'pid'. The function returns True if the handler was successfully removed, False if there was nothing to remove.N)r����)r ���r_���r���r���r����remove_child_handler���s����z)AbstractChildWatcher.remove_child_handlerc�������������C���s ���t�������d�S)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. N)r����)r ���r����r���r���r����attach_loop���s����z AbstractChildWatcher.attach_loopc�������������C���s ���t�������d�S)zlClose the watcher. This must be called to make sure that any underlying resource is freed. N)r����)r ���r���r���r���r%������s����zAbstractChildWatcher.closec�������������C���s ���t�������d�S)zdEnter the watcher's context and allow starting new processes This function must return selfN)r����)r ���r���r���r���� __enter__���s����zAbstractChildWatcher.__enter__c�������������C���s ���t�������d�S)zExit the watcher's contextN)r����)r ����a�b�cr���r���r����__exit__���s����zAbstractChildWatcher.__exit__N) r{���r|���r}���r~���rR���r����r����r%���r����r����r���r���r���r���r������s��� c���������������@���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)�BaseChildWatcherc�������������C���s���d��|��_��i��|��_�d��S)N)r����� _callbacks)r ���r���r���r���r�����s���� zBaseChildWatcher.__init__c�������������C���s���|��j��d����d��S)N)r����)r ���r���r���r���r%��� ��s����zBaseChildWatcher.closec�������������C���s ���t�������d��S)N)r����)r ����expected_pidr���r���r����_do_waitpid��s����zBaseChildWatcher._do_waitpidc�������������C���s ���t�������d��S)N)r����)r ���r���r���r����_do_waitpid_all��s����z BaseChildWatcher._do_waitpid_allc�������������C���s����|�d��k�s$�t��|�t�j���s$�t���|��j�d��k �rX�|�d��k�rX�|��j�rX�t�j�d�t���|��j�d��k �rz�|��j�j �t �j���|�|��_�|�d��k �r��|�j�t �j�|��j ���|��j����d��S)NzCA loop is being detached from a child watcher with pending handlers)rE���r���ZAbstractEventLooprd���r����r����r����r�����RuntimeWarningr'���r/����SIGCHLDr?���� _sig_chldr����)r ���r����r���r���r���r������s����$$ zBaseChildWatcher.attach_loopc�������������C���sV���y�|��j�����WnA�t�k �rQ�}�z!�|��j�j�d�d�d�|�i���WYd��d��}�~�Xn�Xd��S)Nr����z$Unknown exception in SIGCHLD handlerr����)r����rT���r����r����)r ���r=���r���r���r���r����&��s���� zBaseChildWatcher._sig_chldc�������������C���sA���t��j�|���r�t��j�|���St��j�|���r9�t��j�|���S|�Sd��S)N)rt����WIFSIGNALED�WTERMSIG� WIFEXITED�WEXITSTATUS)r ����statusr���r���r����_compute_returncode2��s ���� z$BaseChildWatcher._compute_returncodeN) r{���r|���r}���r���r%���r����r����r����r����r����r���r���r���r���r������s���r����c�������������������sp���e��Z�d��Z�d�Z����f�d�d����Z�d�d����Z�d�d����Z�d�d ����Z�d �d����Z�d�d ����Z �d�d����Z ����S)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����������������s���|��j��j����t����j����d��S)N)r����r����r���r%���)r ���)r"���r���r���r%���K��s���� zSafeChildWatcher.closec�������������C���s���|��S)Nr���)r ���r���r���r���r����O��s����zSafeChildWatcher.__enter__c�������������C���s���d��S)Nr���)r ���r����r����r����r���r���r���r����R��s����zSafeChildWatcher.__exit__c�������������G���s?���|��j��d��k�r�t�d�����|�|�f�|��j�|�<|��j�|���d��S)NzICannot add child handler, the child watcher does not have a loop attached)r����r4���r����r����)r ���r_���r;���r<���r���r���r���rR���U��s ���� z"SafeChildWatcher.add_child_handlerc�������������C���s/���y�|��j��|�=d�SWn�t�k �r*�d�SYn�Xd��S)NTF)r����rA���)r ���r_���r���r���r���r����`��s ���� z%SafeChildWatcher.remove_child_handlerc�������������C���s+���x$�t��|��j���D]�}�|��j�|���q�Wd��S)N)r&���r����r����)r ���r_���r���r���r���r����g��s����z SafeChildWatcher._do_waitpid_allc�������������C���s ��|�d�k�s�t����y�t�j�|�t�j���\�}�}�Wn.�t�k �ra�|�}�d�}�t�j�d�|���YnB�X|�d�k�rr�d��S|��j�|���}�|��j�j ����r��t�j �d�|�|���y�|��j�j�|���\�}�}�Wn7�t �k �r��|��j�j ����r��t�j�d�|�d�d��Yn�X|�|�|�|���d��S)Nr�������z8Unknown child process pid %d, will report returncode 255z$process %s exited with returncode %sz'Child watcher got an unexpected pid: %rr����T)rd���rt����waitpid�WNOHANG�ChildProcessErrorr���r����r����r����r����r����r�����poprA���)r ���r����r_���r����r`���r;���r<���r���r���r���r����l��s,���� zSafeChildWatcher._do_waitpid)r{���r|���r}���r~���r%���r����r����rR���r����r����r����r���r���)r"���r���r���@��s��� c�������������������sv���e��Z�d��Z�d�Z����f�d�d����Z����f�d�d����Z�d�d����Z�d�d ����Z�d �d����Z�d�d ����Z �d�d����Z ����S)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����������������s2���t�����j����t�j����|��_�i��|��_�d�|��_�d��S)Nr���)r���r���� threadingZLock�_lock�_zombies�_forks)r ���)r"���r���r���r������s���� zFastChildWatcher.__init__c����������������s+���|��j��j����|��j�j����t����j����d��S)N)r����r����r����r���r%���)r ���)r"���r���r���r%������s���� zFastChildWatcher.closec���������� ���C���s(���|��j����|��j�d�7_�|��SWd��QRXd��S)Nr���)r����r����)r ���r���r���r���r�������s���� zFastChildWatcher.__enter__c���������� ���C���sg���|��j���G�|��j�d�8_�|��j�s,�|��j�r0�d��St�|��j���}�|��j�j����Wd��QRXt�j�d�|���d��S)Nr���z5Caught subprocesses termination from unknown pids: %s)r����r����r����r5���r����r���r����)r ���r����r����r����Zcollateral_victimsr���r���r���r�������s���� zFastChildWatcher.__exit__c�������������G���s����|��j��s�t�d�����|��j�d��k�r0�t�d�����|��j��G�y�|��j�j�|���}�Wn)�t�k �r{�|�|�f�|��j�|�<d��SYn�XWd��QRX|�|�|�|���d��S)NzMust use the context managerzICannot add child handler, the child watcher does not have a loop attached) r����rd���r����r4���r����r����r����rA���r����)r ���r_���r;���r<���r`���r���r���r���rR������s���� z"FastChildWatcher.add_child_handlerc�������������C���s/���y�|��j��|�=d�SWn�t�k �r*�d�SYn�Xd��S)NTF)r����rA���)r ���r_���r���r���r���r�������s ���� z%FastChildWatcher.remove_child_handlerc�������������C���s9��x2y�t��j�d�t��j���\�}�}�Wn�t�k �r:�d��SYn �X|�d�k�rK�d��S|��j�|���}�|��j����y�|��j�j�|���\�}�}�WnS�t�k �r��|��j �r��|�|��j �|�<|��j�j����r��t �j�d�|�|���w�d��}�Yn#�X|��j�j����r��t �j�d�|�|���Wd��QRX|�d��k�r!t �j�d�|�|���q�|�|�|�|���q�Wd��S)Nr���r���z,unknown process %s exited with returncode %sz$process %s exited with returncode %sz8Caught subprocess termination from unknown pid: %d -> %dr,���)rt���r����r����r����r����r����r����r����rA���r����r����r����r����r���r����r����)r ���r_���r����r`���r;���r<���r���r���r���r�������s6���� z FastChildWatcher._do_waitpid_all)r{���r|���r}���r~���r���r%���r����r����rR���r����r����r���r���)r"���r���r������s��� c�������������������sd���e��Z�d��Z�d�Z�e�Z����f�d�d����Z�d�d����Z����f�d�d����Z�d�d ����Z �d �d����Z ����S)�_UnixDefaultEventLoopPolicyz:UNIX event loop policy with a watcher for child processes.c����������������s���t�����j����d��|��_�d��S)N)r���r����_watcher)r ���)r"���r���r���r�����s���� z$_UnixDefaultEventLoopPolicy.__init__c���������� ���C���s^���t��j��N�|��j�d��k�rS�t����|��_�t�t�j����t�j���rS�|��j�j�|��j �j ���Wd��QRXd��S)N)r���r����r����r���rE���r�����current_thread�_MainThreadr�����_localr����)r ���r���r���r���� _init_watcher��s���� z)_UnixDefaultEventLoopPolicy._init_watcherc����������������sK���t�����j�|���|��j�d�k �rG�t�t�j����t�j���rG�|��j�j�|���d�S)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����rE���r����r����r����r����)r ���r����)r"���r���r���r�� ��s����z*_UnixDefaultEventLoopPolicy.set_event_loopc�������������C���s ���|��j��d�k�r�|��j����|��j��S)zzGet the watcher for child processes. If not yet set, a SafeChildWatcher object is automatically created. N)r����r���)r ���r���r���r���rP�����s���� z-_UnixDefaultEventLoopPolicy.get_child_watcherc�������������C���sJ���|�d�k�s!�t��|�t���s!�t���|��j�d�k �r=�|��j�j����|�|��_�d�S)z$Set the watcher for child processes.N)rE���r���rd���r����r%���)r ���r[���r���r���r����set_child_watcher%��s����! z-_UnixDefaultEventLoopPolicy.set_child_watcher)r{���r|���r}���r~���r���Z _loop_factoryr���r���r��rP���r��r���r���)r"���r���r�������s��� r����)5r~���r8���rt���r/���r#���rr���r����r����r����r������r���r���r���r���r���r���r ���r ���r���r���r ����logr����__all__r�����ImportErrorr���Zfspathrq����AttributeErrorZBaseSelectorEventLoopr����hasattrr����r����Z ReadTransportrH���Z_FlowControlMixinZWriteTransportrN���r����r����ZBaseSubprocessTransportrQ���r���r����r���r���ZBaseDefaultEventLoopPolicyr����r���r���r���r���r���r����<module>���sh��� ���� F=On2