Edit File: windows_events.cpython-36.pyc
3 � \�l������������������@���s���d�Z�ddlZddlZddlZddlZddlZddlZddlmZ�ddlm Z �ddlm Z �ddlmZ�ddlmZ�dd lm Z �dd lmZ�ddlmZ�ddlmZ�dd lmZ�ddddgZdZdZdZdZdZdZG�dd��de j�ZG�dd��de j�ZG�dd��de�ZG�dd��de�ZG�dd ��d e �Z!G�d!d"��d"ej"�Z#G�d#d��dej$�Z%G�d$d��d�Z&G�d%d&��d&e j'�Z(e#Z)G�d'd(��d(ej*�Z+e+Z,dS�))z.Selector and proactor event loops for Windows.�����N����)�events)�base_subprocess)�futures)�proactor_events)�selector_events)�tasks)� windows_utils)�_overlapped)� coroutine)�logger�SelectorEventLoop�ProactorEventLoop�IocpProactor�DefaultEventLoopPolicyl������i���i���g����MbP?g�������?c�������������������s^���e�Zd�ZdZdd���fdd� Z��fdd�Zdd ��Z��fd d�Z��fdd �Z��fdd�Z ���Z S�)�_OverlappedFuturez�Subclass of Future which represents an overlapped operation. Cancelling it will immediately cancel the overlapped operation. N)�loopc���������������s&���t���j|d��|�jr|�jd=�||�_d�S�)N)r���r������)�super�__init__�_source_traceback�_ov)�self�ovr���)� __class__���./usr/lib64/python3.6/asyncio/windows_events.pyr���-���s����z_OverlappedFuture.__init__c����������������s@���t���j��}|�jd�k r<|�jjr dnd}|jdd||�jjf���|S�)N�pendingZ completedr���zoverlapped=<%s, %#x>)r���� _repr_infor���r����insert�address)r����info�state)r���r���r���r���3���s ���� z_OverlappedFuture._repr_infoc�������������C���sr���|�j�d�krd�S�y|�j�j���W�nJ�tk rf�}�z.d||�d�}|�jrJ|�j|d<�|�jj|��W�Y�d�d�}~X�nX�d�|�_�d�S�)Nz&Cancelling an overlapped future failed)�message� exception�future�source_traceback)r����cancel�OSErrorr����_loop�call_exception_handler)r����exc�contextr���r���r����_cancel_overlapped:���s���� z$_OverlappedFuture._cancel_overlappedc����������������s���|�j����t��j��S�)N)r-���r���r'���)r���)r���r���r���r'���J���s����z_OverlappedFuture.cancelc����������������s���t���j|��|�j���d�S�)N)r���� set_exceptionr-���)r���r$���)r���r���r���r.���N���s����z_OverlappedFuture.set_exceptionc����������������s���t���j|��d�|�_d�S�)N)r���� set_resultr���)r����result)r���r���r���r/���R���s����z_OverlappedFuture.set_result)�__name__� __module__�__qualname__�__doc__r���r���r-���r'���r.���r/���� __classcell__r���r���)r���r���r���'���s���r���c�������������������sn���e�Zd�ZdZdd���fdd� Zdd��Z��fdd �Zd d��Zdd ��Z��fdd�Z ��fdd�Z ��fdd�Z���ZS�)�_BaseWaitHandleFuturez2Subclass of Future which represents a wait handle.N)r���c���������������s8���t���j|d��|�jr|�jd=�||�_||�_||�_d|�_d�S�)N)r���r���Tr���)r���r���r���r����_handle�_wait_handle�_registered)r���r����handle�wait_handler���)r���r���r���r���Z���s����z_BaseWaitHandleFuture.__init__c�������������C���s���t�j|�jd�t�jkS�)Nr���)�_winapiZWaitForSingleObjectr7���Z WAIT_OBJECT_0)r���r���r���r����_pollh���s����z_BaseWaitHandleFuture._pollc����������������s\���t���j��}|jd|�j���|�jd�k r>|�j��r0dnd}|j|��|�jd�k rX|jd|�j���|S�)Nz handle=%#xZsignaledZwaitingzwait_handle=%#x)r���r����appendr7���r=���r8���)r���r!���r"���)r���r���r���r���m���s���� z _BaseWaitHandleFuture._repr_infoc�������������C���s ���d�|�_�d�S�)N)r���)r����futr���r���r����_unregister_wait_cbw���s����z)_BaseWaitHandleFuture._unregister_wait_cbc�������������C���s����|�j�s d�S�d|�_�|�j}d�|�_ytj|��W�nZ�tk r��}�z>|jtjkrtd||�d�}|�jrd|�j|d<�|�jj |��d�S�W�Y�d�d�}~X�nX�|�j d���d�S�)NFz$Failed to unregister the wait handle)r#���r$���r%���r&���)r9���r8���r ���ZUnregisterWaitr(����winerror�ERROR_IO_PENDINGr���r)���r*���r@���)r���r;���r+���r,���r���r���r����_unregister_wait|���s"���� z&_BaseWaitHandleFuture._unregister_waitc����������������s���|�j����t��j��S�)N)rC���r���r'���)r���)r���r���r���r'�������s����z_BaseWaitHandleFuture.cancelc����������������s���|�j����t��j|��d�S�)N)rC���r���r.���)r���r$���)r���r���r���r.�������s����z#_BaseWaitHandleFuture.set_exceptionc����������������s���|�j����t��j|��d�S�)N)rC���r���r/���)r���r0���)r���r���r���r/�������s����z _BaseWaitHandleFuture.set_result) r1���r2���r3���r4���r���r=���r���r@���rC���r'���r.���r/���r5���r���r���)r���r���r6���W���s��� r6���c�������������������sF���e�Zd�ZdZdd���fdd� Zdd��Z��fdd �Z��fd d�Z���ZS�)�_WaitCancelFuturezoSubclass of Future which represents a wait for the cancellation of a _WaitHandleFuture using an event. N)r���c���������������s���t���j||||d��d�|�_d�S�)N)r���)r���r����_done_callback)r���r����eventr;���r���)r���r���r���r�������s����z_WaitCancelFuture.__init__c�������������C���s���t�d��d�S�)Nz'_WaitCancelFuture must not be cancelled)�RuntimeError)r���r���r���r���r'�������s����z_WaitCancelFuture.cancelc����������������s$���t���j|��|�jd�k r |�j|���d�S�)N)r���r/���rE���)r���r0���)r���r���r���r/�������s���� z_WaitCancelFuture.set_resultc����������������s$���t���j|��|�jd�k r |�j|���d�S�)N)r���r.���rE���)r���r$���)r���r���r���r.�������s���� z_WaitCancelFuture.set_exception) r1���r2���r3���r4���r���r'���r/���r.���r5���r���r���)r���r���rD�������s ���rD���c�������������������s6���e�Zd�Zdd���fdd� Z��fdd�Zdd��Z���ZS�) �_WaitHandleFutureN)r���c���������������s<���t���j||||d��||�_d|�_tjd�ddd��|�_d�|�_d�S�)N)r���TF)r���r���� _proactorZ_unregister_proactorr ���ZCreateEvent�_event� _event_fut)r���r���r:���r;����proactorr���)r���r���r���r�������s ����z_WaitHandleFuture.__init__c����������������sF���|�j�d�k r"tj|�j���d�|�_�d�|�_|�jj|�j��d�|�_t��j|��d�S�)N) rJ���r<����CloseHandlerK���rI����_unregisterr���r���r@���)r���r?���)r���r���r���r@�������s���� z%_WaitHandleFuture._unregister_wait_cbc�������������C���s����|�j�s d�S�d|�_�|�j}d�|�_ytj||�j��W�nZ�tk r��}�z>|jtjkrxd||�d�}|�jrh|�j|d<�|�j j |��d�S�W�Y�d�d�}~X�nX�|�jj|�j|�j �|�_d�S�)NFz$Failed to unregister the wait handle)r#���r$���r%���r&���)r9���r8���r ���ZUnregisterWaitExrJ���r(���rA���rB���r���r)���r*���rI����_wait_cancelr@���rK���)r���r;���r+���r,���r���r���r���rC�������s$���� z"_WaitHandleFuture._unregister_wait)r1���r2���r3���r���r@���rC���r5���r���r���)r���r���rH�������s���rH���c���������������@���s<���e�Zd�ZdZdd��Zdd��Zdd��Zdd ��Zd d��ZeZ dS�) � PipeServerzXClass representing a pipe server. This is much like a bound, listening socket. c�������������C���s,���||�_�tj��|�_d�|�_d�|�_|�jd�|�_d�S�)NT)�_address�weakref�WeakSet�_free_instances�_pipe�_accept_pipe_future�_server_pipe_handle)r���r ���r���r���r���r�������s ���� zPipeServer.__init__c�������������C���s���|�j�|�jd��}|�_�|S�)NF)rU���rW���)r����tmpr���r���r����_get_unconnected_pipe����s����z PipeServer._get_unconnected_pipec���������� ���C���sr���|�j���rd�S�tjtjB�}|r&|tjO�}tj|�j|tjtjB�tj B�tj tjtjtj tj�}tj|�}|�jj|��|S�)N)�closedr<���ZPIPE_ACCESS_DUPLEXZFILE_FLAG_OVERLAPPEDZFILE_FLAG_FIRST_PIPE_INSTANCEZCreateNamedPiperQ���ZPIPE_TYPE_MESSAGEZPIPE_READMODE_MESSAGEZ PIPE_WAITZPIPE_UNLIMITED_INSTANCESr ���ZBUFSIZEZNMPWAIT_WAIT_FOREVER�NULL� PipeHandlerT����add)r����first�flags�h�piper���r���r���rW�����s���� zPipeServer._server_pipe_handlec�������������C���s ���|�j�d�kS�)N)rQ���)r���r���r���r���rZ�����s����zPipeServer.closedc�������������C���sV���|�j�d�k r|�j�j���d�|�_�|�jd�k rRx|�jD�]}|j���q,W�d�|�_d�|�_|�jj���d�S�)N)rV���r'���rQ���rT����closerU����clear)r���ra���r���r���r���rb�����s���� zPipeServer.closeN) r1���r2���r3���r4���r���rY���rW���rZ���rb����__del__r���r���r���r���rP�������s��� rP���c���������������@���s���e�Zd�ZdZdd��ZdS�)�_WindowsSelectorEventLoopz'Windows version of selector event loop.c�������������C���s���t�j��S�)N)r ���� socketpair)r���r���r���r����_socketpair+��s����z%_WindowsSelectorEventLoop._socketpairN)r1���r2���r3���r4���rg���r���r���r���r���re���(��s���re���c�������������������sP���e�Zd�ZdZd ��fdd� Zdd��Zedd���Zed d ���Zeddd��Z ���Z S�)r���z2Windows version of proactor event loop using IOCP.Nc����������������s���|d�krt���}t��j|��d�S�)N)r���r���r���)r���rL���)r���r���r���r���2��s����zProactorEventLoop.__init__c�������������C���s���t�j��S�)N)r ���rf���)r���r���r���r���rg���7��s����zProactorEventLoop._socketpairc�������������c���s8���|�j�j|�}|E�d�H�}|��}|�j||d|id�}||fS�)N�addr)�extra)rI����connect_pipe�_make_duplex_pipe_transport)r����protocol_factoryr ����fra����protocol�transr���r���r����create_pipe_connection:��s���� z(ProactorEventLoop.create_pipe_connectionc����������������s.���t�����d������fdd� ��j����gS�)Nc����������������s��d�}yj|�rL|�j���}�jj|���j��r2|j���d�S����}�j||d��id���j��}|d�kr`d�S��jj|�}�W�n��t k r��}�zH|r�|j ��d kr��jd||d���|j���n�jr�t jd|dd��W�Y�d�d�}~X�n2�tjk r����|r�|j���Y�nX�|��_|�j���d�S�) Nrh���)ri���r���zPipe accept failed)r#���r$���ra���zAccept pipe failed on pipe %rT)�exc_infor���)r0���rT����discardrZ���rb���rk���rY���rI����accept_piper(����filenor*���Z_debugr���Zwarningr����CancelledErrorrV����add_done_callback)rm���ra���rn���r+���)r ����loop_accept_piperl���r����serverr���r���rw���G��s<���� z>ProactorEventLoop.start_serving_pipe.<locals>.loop_accept_pipe)N)rP���Z call_soon)r���rl���r ���r���)r ���rw���rl���r���rx���r����start_serving_pipeC��s����( z$ProactorEventLoop.start_serving_pipec �������������k���s����|�j���} t|�|||||||f| |d�| ��}y| E�d�H��W�n&�tk r`�}�z |} W�Y�d�d�}~X�nX�d�} | d�k r�|j���|j��E�d�H��| �|S�)N)�waiterri���)� create_future�_WindowsSubprocessTransport� Exceptionrb���Z_wait)r���rn����args�shell�stdin�stdout�stderr�bufsizeri����kwargsrz���Ztranspr+����errr���r���r����_make_subprocess_transportr��s���� z,ProactorEventLoop._make_subprocess_transport)N)N)r1���r2���r3���r4���r���rg���r���rp���ry���r����r5���r���r���)r���r���r���/��s��� /c���������������@���s����e�Zd�ZdZd1dd�Zdd��Zdd��Zd2d d�Zdd ��Zd3dd�Z d4dd�Z dd��Zdd��Zdd��Z edd���Zd5dd�Zdd��Zdd ��Zd!d"��Zd#d$��Zd%d&��Zd'd(��Zd6d)d*�Zd+d,��Zd-d.��Zd/d0��Zd S�)7r���z#Proactor implementation using IOCP.�������c�������������C���sD���d�|�_�g�|�_tjtjtd|�|�_i�|�_tj ��|�_ g�|�_tj ��|�_d�S�)Nr���) r)����_resultsr ����CreateIoCompletionPort�INVALID_HANDLE_VALUEr[����_iocp�_cacherR���rS���r9���� _unregistered�_stopped_serving)r���Zconcurrencyr���r���r���r������s���� zIocpProactor.__init__c�������������C���s���d|�j�jt|�j�t|�j�f�S�)Nz<%s overlapped#=%s result#=%s>)r���r1����lenr����r����)r���r���r���r����__repr__���s����zIocpProactor.__repr__c�������������C���s ���||�_�d�S�)N)r)���)r���r���r���r���r����set_loop���s����zIocpProactor.set_loopNc�������������C���s ���|�j�s|�j|��|�j�}g�|�_�|S�)N)r����r=���)r����timeoutrX���r���r���r����select���s ���� zIocpProactor.selectc�������������C���s���|�j�j��}|j|��|S�)N)r)���r{���r/���)r����valuer?���r���r���r����_result���s���� zIocpProactor._resultr���c�������������C���sz���|�j�|��tjt�}y4t|tj�r6|j|j��||��n|j|j��|��W�n�t k rb���|�j d�S�X�dd��}|�j|||�S�)N�����c�������������S���sJ���y|j���S��tk rD�}�z |jtjkr2t|j���n��W�Y�d�d�}~X�nX�d�S�)N)� getresultr(���rA���r ����ERROR_NETNAME_DELETED�ConnectionResetErrorr~���)ro����keyr���r+���r���r���r����finish_recv���s����z&IocpProactor.recv.<locals>.finish_recv)�_register_with_iocpr ���� Overlappedr[���� isinstance�socketZWSARecvrt���ZReadFile�BrokenPipeErrorr����� _register)r����conn�nbytesr_���r���r����r���r���r����recv���s���� zIocpProactor.recvc�������������C���sZ���|�j�|��tjt�}t|tj�r4|j|j��||��n|j|j��|��dd��}|�j |||�S�)Nc�������������S���sJ���y|j���S��tk rD�}�z |jtjkr2t|j���n��W�Y�d�d�}~X�nX�d�S�)N)r����r(���rA���r ���r����r����r~���)ro���r����r���r+���r���r���r����finish_send���s����z&IocpProactor.send.<locals>.finish_send) r����r ���r����r[���r����r����ZWSASendrt���Z WriteFiler����)r���r�����bufr_���r���r����r���r���r����send���s���� zIocpProactor.sendc����������������sz���|�j����|�j�j���tjt�}|j�j����j�������fdd�}tdd���}|�j |�|�}||���}t j||�jd��|S�)Nc����������������sD���|j����tjd�j���}��jtjtj|����j �j ��������j��fS�)Nz@P)r�����structZpackrt���� setsockoptr����� SOL_SOCKETr ���ZSO_UPDATE_ACCEPT_CONTEXT� settimeoutZ gettimeoutZgetpeername)ro���r����r���r����)r�����listenerr���r���� finish_accept���s���� z*IocpProactor.accept.<locals>.finish_acceptc�������������s���s4���y|�E�d�H��W�n �t�jk r.���|j�����Y�nX�d�S�)N)r���ru���rb���)r%���r����r���r���r����accept_coro���s ����z(IocpProactor.accept.<locals>.accept_coro)r���) r�����_get_accept_socket�familyr ���r����r[���ZAcceptExrt���r���r����r���Z ensure_futurer)���)r���r����r���r����r����r%����coror���)r����r����r����accept���s���� zIocpProactor.acceptc����������������s����|�j�����ytj��j����j��W�nB�tk rb�}�z&|jtjkr@����j ��d�dkrR��W�Y�d�d�}~X�nX�tj t�}|j��j��|����fdd�}|�j |��|�S�)Nr���r���c����������������s���|j������jtjtjd����S�)Nr���)r����r����r����r����r ���ZSO_UPDATE_CONNECT_CONTEXT)ro���r����r���)r����r���r����finish_connect��s���� z,IocpProactor.connect.<locals>.finish_connect)r����r ���Z BindLocalrt���r����r(���rA����errnoZ WSAEINVALZgetsocknamer����r[���Z ConnectExr����)r���r����r ����er���r����r���)r����r����connect���s���� zIocpProactor.connectc����������������sJ���|�j�����tjt�}|j��j���}|r0|�j���S���fdd�}|�j|��|�S�)Nc����������������s���|j������S�)N)r����)ro���r����r���)ra���r���r����finish_accept_pipe��s����z4IocpProactor.accept_pipe.<locals>.finish_accept_pipe)r����r ���r����r[���ZConnectNamedPipert���r����r����)r���ra���r���Z connectedr����r���)ra���r���rs��� ��s���� zIocpProactor.accept_pipec�������������c���sz���t�}xjytj|�}P�W�n0�tk rF�}�z|jtjkr6��W�Y�d�d�}~X�nX�t|d�t�}tj ||�j d�E�d�H��qW�tj|�S�)N����)r���) �CONNECT_PIPE_INIT_DELAYr ���ZConnectPiper(���rA���ZERROR_PIPE_BUSY�min�CONNECT_PIPE_MAX_DELAYr���Zsleepr)���r ���r\���)r���r ���Zdelayr:���r+���r���r���r���rj�����s���� zIocpProactor.connect_pipec�������������C���s���|�j�||d�S�)z�Wait for a handle. Return a Future object. The result of the future is True if the wait completed, or False if the wait did not complete (on timeout). F)�_wait_for_handle)r���r:���r����r���r���r����wait_for_handle/��s����zIocpProactor.wait_for_handlec�������������C���s���|�j�|d�d�}||_|S�)NT)r����rE���)r���rF���Z done_callbackr?���r���r���r���rO���7��s����zIocpProactor._wait_cancelc����������������s����|d�krt�j}ntj|d��}tjt�}tj||�j|j |�}|rTt ||||�jd���nt||||�|�jd�����j rv��j d=���fdd�}��|d|f|�j|j <���S�)Ng�����@�@)r���r���c����������������s�����j���S�)N)r=���)ro���r����r���)rm���r���r����finish_wait_for_handleR��s����z=IocpProactor._wait_for_handle.<locals>.finish_wait_for_handler���r���)r<����INFINITE�math�ceilr ���r����r[���ZRegisterWaitWithQueuer����r ���rD���r)���rH���r���r����)r���r:���r����Z _is_cancel�msr���r;���r����r���)rm���r���r����>��s���� zIocpProactor._wait_for_handlec�������������C���s0���||�j�kr,|�j�j|��tj|j��|�jdd��d�S�)Nr���)r9���r]���r ���r����rt���r����)r����objr���r���r���r����^��s���� z IocpProactor._register_with_iocpc�������������C���s����t�||�jd�}|jr|jd=�|jsjy|d�d�|�}W�n,�tk r^�}�z|j|��W�Y�d�d�}~X�nX�|j|��||||f|�j|j<�|S�)N)r���r���r���) r���r)���r���r���r(���r.���r/���r����r ���)r���r���r�����callbackrm���r����r����r���r���r���r����h��s���� zIocpProactor._registerc�������������C���s���|�j�j|��dS�)a ��Unregister an overlapped object. Call this method when its future has been cancelled. The event can already be signalled (pending in the proactor event queue). It is also safe if the event is never signalled (because it was cancelled). N)r����r>���)r���r���r���r���r���rN������s����zIocpProactor._unregisterc�������������C���s���t�j�|�}|jd��|S�)Nr���)r����r����)r���r�����sr���r���r���r�������s���� zIocpProactor._get_accept_socketc�������������C���s���|d�krt�}n0|dk�r td��ntj|d��}|t�kr>td���xtj|�j|�}|d�krZP�d}|\}}}}y|�jj|�\}} } }W�nV�t k r����|�j j��r�|�j jdd||||f�d���|dtj fkr�tj|��wBY�nX�| |�jkr�|j���qB|j��sBy|||| �}W�n:�tk �r@�} �z|j| ��|�jj|��W�Y�d�d�} ~ X�qBX�|j|��|�jj|��qBW�x |�jD�]} |�jj| jd����qdW�|�jj���d�S�)Nr���znegative timeoutg�����@�@ztimeout too bigz8GetQueuedCompletionStatus() returned an unexpected eventz)err=%s transferred=%s key=%#x address=%#x)r#����status)r����� ValueErrorr����r����r ���ZGetQueuedCompletionStatusr����r�����pop�KeyErrorr)���Z get_debugr*���r����r<���rM���r����r'����doner(���r.���r����r>���r/���r����r ���rc���)r���r����r����r����r����Ztransferredr����r ���rm���r���r����r����r����r����r���r���r���r=������sJ���� zIocpProactor._pollc�������������C���s���|�j�j|��d�S�)N)r����r]���)r���r����r���r���r���� _stop_serving���s����zIocpProactor._stop_servingc�������������C���s����x�t�|�jj���D�]�\}\}}}}|j��r*qt|t�r6qy|j���W�q�tk r��}�z8|�jd�k r�d||d�}|j rz|j |d<�|�jj |��W�Y�d�d�}~X�qX�qW�x|�jr�|�jd�s�tj d��q�W�g�|�_|�jd�k r�tj|�j��d�|�_d�S�)NzCancelling a future failed)r#���r$���r%���r&���r���z"taking long time to close proactor)�listr�����itemsZ cancelledr����rD���r'���r(���r)���r���r*���r=���r����debugr����r����r<���rM���)r���r ���r?���r���r����r����r+���r,���r���r���r���rb������s,���� " zIocpProactor.closec�������������C���s���|�j����d�S�)N)rb���)r���r���r���r���rd������s����zIocpProactor.__del__)r����)N)r���)r���)N)N)r1���r2���r3���r4���r���r����r����r����r����r����r����r����r����rs���r���rj���r����rO���r����r����r����rN���r����r=���r����rb���rd���r���r���r���r���r������s.��� 7 c���������������@���s���e�Zd�Zdd��ZdS�)r|���c������� ���������sP���t�j|f|||||d�|����_��fdd�}��jjjt��jj��} | j|��d�S�)N)r���r����r����r����r����c����������������s�����j�j��}��j|��d�S�)N)�_procZpollZ_process_exited)rm���� returncode)r���r���r���r�������s���� z4_WindowsSubprocessTransport._start.<locals>.callback) r ����Popenr����r)���rI���r�����intr7���rv���) r���r~���r���r����r����r����r����r����r����rm���r���)r���r����_start���s����z"_WindowsSubprocessTransport._startN)r1���r2���r3���r����r���r���r���r���r|������s���r|���c���������������@���s���e�Zd�ZeZdS�)�_WindowsDefaultEventLoopPolicyN)r1���r2���r3���r ���Z _loop_factoryr���r���r���r���r������s���r����)-r4���r<���r����r����r����r����rR�����r���r���r���r���r���r���r ���r ���Z coroutinesr����logr����__all__r[���r����ZERROR_CONNECTION_REFUSEDZERROR_CONNECTION_ABORTEDr����r����ZFuturer���r6���rD���rH����objectrP���ZBaseSelectorEventLoopre���ZBaseProactorEventLoopr���r���ZBaseSubprocessTransportr|���r ���ZBaseDefaultEventLoopPolicyr����r���r���r���r���r����<module>���sL���0J4;]��k