B
    0*™\Py  ã               @   sŒ  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Zd ZdZdZdZdZdZG dd„ dejƒZG dd„ dejƒZG dd„ deƒZG dd„ deƒZG dd„ deƒZ G dd„ dej!ƒZ"G dd„ dej#ƒZ$G dd „ d ƒZ%G d!d"„ d"ej&ƒZ'e"Z(G d#d$„ d$e
j)ƒZ*G d%d&„ d&e
j)ƒZ+e*Z,dS )'é    Né   )Úevents)Úbase_subprocess)Úfutures)Úproactor_events)Úselector_events)Útasks)Úwindows_utils)Úlogger)ÚSelectorEventLoopÚProactorEventLoopÚIocpProactorÚDefaultEventLoopPolicyÚWindowsSelectorEventLoopPolicyÚWindowsProactorEventLoopPolicyl   ÿÿ iÉ  iÔ  gü©ñÒMbP?gš™™™™™¹?c                   sZ   e Zd Zddœ‡ fdd„
Z‡ fdd„Zdd„ Z‡ fd	d
„Z‡ fdd„Z‡ fdd„Z‡  Z	S )Ú_OverlappedFutureN)Úloopc               s&   t ƒ j|d | jr| jd= || _d S )N)r   éÿÿÿÿ)ÚsuperÚ__init__Ú_source_tracebackÚ_ov)ÚselfÚovr   )Ú	__class__© úAC:\ALexclude\prg\programme\Python37\Lib\asyncio\windows_events.pyr   0   s    z_OverlappedFuture.__init__c                sH   t ƒ  ¡ }| jd k	rD| jjr dnd}| dd|› d| jjd›d¡ |S )NÚpendingZ	completedr   zoverlapped=<z, z#xú>)r   Ú
_repr_infor   r   ÚinsertÚaddress)r   ÚinfoÚstate)r   r   r   r   6   s
    

 z_OverlappedFuture._repr_infoc          
   C   sr   | j d krd S y| j  ¡  W nJ tk
rf } z,d|| dœ}| jrJ| j|d< | j |¡ W d d }~X Y nX 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   |   ¡  tƒ  ¡ S )N)r.   r   r(   )r   )r   r   r   r(   M   s    z_OverlappedFuture.cancelc                s   t ƒ  |¡ |  ¡  d S )N)r   Úset_exceptionr.   )r   r%   )r   r   r   r/   Q   s    z_OverlappedFuture.set_exceptionc                s   t ƒ  |¡ d | _d S )N)r   Ú
set_resultr   )r   Úresult)r   r   r   r0   U   s    z_OverlappedFuture.set_result)
Ú__name__Ú
__module__Ú__qualname__r   r   r.   r(   r/   r0   Ú__classcell__r   r   )r   r   r   *   s   r   c                   sj   e Zd Zddœ‡ fdd„
Zdd„ Z‡ fdd„Zd	d
„ Zdd„ Z‡ fdd„Z‡ fdd„Z	‡ fdd„Z
‡  ZS )Ú_BaseWaitHandleFutureN)r   c               s8   t ƒ j|d | jr| jd= || _|| _|| _d| _d S )N)r   r   T)r   r   r   r   Ú_handleÚ_wait_handleÚ_registered)r   r   ÚhandleÚwait_handler   )r   r   r   r   ]   s    z_BaseWaitHandleFuture.__init__c             C   s   t  | jd¡t jkS )Nr   )Ú_winapiZWaitForSingleObjectr7   ZWAIT_OBJECT_0)r   r   r   r   Ú_pollk   s    z_BaseWaitHandleFuture._pollc                sd   t ƒ  ¡ }| d| jd›¡ | jd k	rB|  ¡ r4dnd}| |¡ | jd k	r`| d| jd›¡ |S )Nzhandle=z#xZsignaledZwaitingzwait_handle=)r   r   Úappendr7   r=   r8   )r   r"   r#   )r   r   r   r   p   s    



z _BaseWaitHandleFuture._repr_infoc             C   s
   d | _ d S )N)r   )r   Úfutr   r   r   Ú_unregister_wait_cbz   s    z)_BaseWaitHandleFuture._unregister_wait_cbc          
   C   s”   | j s
d S d| _ | j}d | _yt |¡ W nZ tk
r„ } z<|jtjkrtd|| dœ}| jrd| j|d< | j 	|¡ d S W d d }~X Y nX |  
d ¡ d S )NFz$Failed to unregister the wait handle)r$   r%   r&   r'   )r9   r8   Ú_overlappedZUnregisterWaitr)   ÚwinerrorÚERROR_IO_PENDINGr   r*   r+   r@   )r   r;   r,   r-   r   r   r   Ú_unregister_wait   s"    
z&_BaseWaitHandleFuture._unregister_waitc                s   |   ¡  tƒ  ¡ S )N)rD   r   r(   )r   )r   r   r   r(   —   s    z_BaseWaitHandleFuture.cancelc                s   |   ¡  tƒ  |¡ d S )N)rD   r   r/   )r   r%   )r   r   r   r/   ›   s    z#_BaseWaitHandleFuture.set_exceptionc                s   |   ¡  tƒ  |¡ d S )N)rD   r   r0   )r   r1   )r   r   r   r0   Ÿ   s    z _BaseWaitHandleFuture.set_result)r2   r3   r4   r   r=   r   r@   rD   r(   r/   r0   r5   r   r   )r   r   r6   Z   s   
r6   c                   sB   e Zd Zddœ‡ fdd„
Zdd„ Z‡ fdd„Z‡ fd	d
„Z‡  ZS )Ú_WaitCancelFutureN)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d k	r |  | ¡ d S )N)r   r0   rF   )r   r1   )r   r   r   r0   ±   s    
z_WaitCancelFuture.set_resultc                s$   t ƒ  |¡ | jd k	r |  | ¡ d S )N)r   r/   rF   )r   r%   )r   r   r   r/   ¶   s    
z_WaitCancelFuture.set_exception)r2   r3   r4   r   r(   r0   r/   r5   r   r   )r   r   rE   ¤   s   rE   c                   s6   e Zd Zddœ‡ fdd„
Z‡ fdd„Zdd„ Z‡  ZS )	Ú_WaitHandleFutureN)r   c               s<   t ƒ j||||d || _d| _t d ddd ¡| _d | _d S )N)r   TF)r   r   Ú	_proactorZ_unregister_proactorrA   ZCreateEventÚ_eventÚ
_event_fut)r   r   r:   r;   Úproactorr   )r   r   r   r   ½   s
    z_WaitHandleFuture.__init__c                sF   | j d k	r"t | j ¡ d | _ d | _| j | j¡ d | _tƒ  |¡ d S )N)	rK   r<   ÚCloseHandlerL   rJ   Ú_unregisterr   r   r@   )r   r?   )r   r   r   r@   Ä   s    
	z%_WaitHandleFuture._unregister_wait_cbc          
   C   s¢   | j s
d S d| _ | j}d | _yt || j¡ W nZ tk
rˆ } z<|jtjkrxd|| dœ}| jrh| j|d< | j	 
|¡ d S W d d }~X Y nX | j | j| j¡| _d S )NFz$Failed to unregister the wait handle)r$   r%   r&   r'   )r9   r8   rA   ZUnregisterWaitExrK   r)   rB   rC   r   r*   r+   rJ   Ú_wait_cancelr@   rL   )r   r;   r,   r-   r   r   r   rD   Ö   s$    

z"_WaitHandleFuture._unregister_wait)r2   r3   r4   r   r@   rD   r5   r   r   )r   r   rI   ¼   s   rI   c               @   s8   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ ZeZdS )Ú
PipeServerc             C   s,   || _ t ¡ | _d | _d | _|  d¡| _d S )NT)Ú_addressÚweakrefÚWeakSetÚ_free_instancesÚ_pipeÚ_accept_pipe_futureÚ_server_pipe_handle)r   r!   r   r   r   r   õ   s
    
zPipeServer.__init__c             C   s   | j |  d¡ }| _ |S )NF)rV   rX   )r   Útmpr   r   r   Ú_get_unconnected_pipeÿ   s    z PipeServer._get_unconnected_pipec          
   C   sr   |   ¡ rd S tjtjB }|r&|tjO }t | j|tjtjB tj	B tj
tjtjtjtj¡}t |¡}| j |¡ |S )N)Úclosedr<   ZPIPE_ACCESS_DUPLEXZFILE_FLAG_OVERLAPPEDZFILE_FLAG_FIRST_PIPE_INSTANCEZCreateNamedPiperR   ZPIPE_TYPE_MESSAGEZPIPE_READMODE_MESSAGEZ	PIPE_WAITZPIPE_UNLIMITED_INSTANCESr	   ZBUFSIZEZNMPWAIT_WAIT_FOREVERÚNULLÚ
PipeHandlerU   Úadd)r   ÚfirstÚflagsÚhÚpiper   r   r   rX     s    


zPipeServer._server_pipe_handlec             C   s
   | j d kS )N)rR   )r   r   r   r   r[     s    zPipeServer.closedc             C   sV   | j d k	r| j  ¡  d | _ | jd k	rRx| jD ]}| ¡  q,W d | _d | _| j ¡  d S )N)rW   r(   rR   rU   ÚcloserV   Úclear)r   rb   r   r   r   rc     s    


zPipeServer.closeN)	r2   r3   r4   r   rZ   rX   r[   rc   Ú__del__r   r   r   r   rQ   ð   s   
rQ   c               @   s   e Zd ZdS )Ú_WindowsSelectorEventLoopN)r2   r3   r4   r   r   r   r   rf   +  s   rf   c                   s8   e Zd Zd
‡ fdd„	Zdd„ Zdd„ Zddd	„Z‡  ZS )r   Nc                s   |d krt ƒ }tƒ  |¡ d S )N)r   r   r   )r   rM   )r   r   r   r   2  s    zProactorEventLoop.__init__c             Ã   s8   | j  |¡}|I d H }|ƒ }| j||d|id}||fS )NÚaddr)Úextra)rJ   Úconnect_pipeÚ_make_duplex_pipe_transport)r   Úprotocol_factoryr!   Úfrb   ÚprotocolÚtransr   r   r   Úcreate_pipe_connection7  s    
z(ProactorEventLoop.create_pipe_connectionc             ƒ   s.   t ˆ ƒ‰d‡ ‡‡‡‡fdd„	‰ˆ ˆ¡ ˆgS )Nc          
      s  d }yj| rL|   ¡ }ˆj |¡ ˆ ¡ r2| ¡  d S ˆƒ }ˆj||dˆ id ˆ ¡ }|d kr`d S ˆj |¡} W n„ t	k
rÒ } zF|r¬| 
¡ dkr¬ˆ d||dœ¡ | ¡  nˆjrÂtjd|dd W d d }~X Y n2 tjk
rò   |rî| ¡  Y nX | ˆ_|  ˆ¡ d S )	Nrg   )rh   r   zPipe accept failed)r$   r%   rb   zAccept pipe failed on pipe %rT)Úexc_info)r1   rU   Údiscardr[   rc   rj   rZ   rJ   Úaccept_piper)   Úfilenor+   Z_debugr
   Zwarningr   ÚCancelledErrorrW   Úadd_done_callback)rl   rb   rm   r,   )r!   Úloop_accept_piperk   r   Úserverr   r   rv   B  s<    

z>ProactorEventLoop.start_serving_pipe.<locals>.loop_accept_pipe)N)rQ   Z	call_soon)r   rk   r!   r   )r!   rv   rk   r   rw   r   Ústart_serving_pipe?  s    (
z$ProactorEventLoop.start_serving_pipec	          	   Ë   sl   |   ¡ }
t| |||||||f|
|dœ|	—Ž}y|
I d H  W n, tk
rf   | ¡  | ¡ I d H  ‚ Y nX |S )N)Úwaiterrh   )Úcreate_futureÚ_WindowsSubprocessTransportÚ	Exceptionrc   Z_wait)r   rm   ÚargsÚshellÚstdinÚstdoutÚstderrÚbufsizerh   Úkwargsry   Ztranspr   r   r   Ú_make_subprocess_transportm  s    

z,ProactorEventLoop._make_subprocess_transport)N)N)r2   r3   r4   r   ro   rx   r„   r5   r   r   )r   r   r   /  s   0r   c               @   sâ   e Zd Zd6dd„Zdd„ Zdd„ Zdd	„ Zd7dd„Zdd„ Zd8dd„Z	d9dd„Z
d:dd„Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zd;d d!„Zd"d#„ Zd$d%„ Zd&d'„ Zd(d)„ Zd*d+„ Zd,d-„ Zd<d.d/„Zd0d1„ Zd2d3„ Zd4d5„ Zd
S )=r   ì   ÿÿ c             C   sD   d | _ g | _t tjtd|¡| _i | _t 	¡ | _
g | _t 	¡ | _d S )Nr   )r*   Ú_resultsrA   ÚCreateIoCompletionPortÚINVALID_HANDLE_VALUEr\   Ú_iocpÚ_cacherS   rT   r9   Ú_unregisteredÚ_stopped_serving)r   Zconcurrencyr   r   r   r   ‚  s    
zIocpProactor.__init__c             C   s   | j d krtdƒ‚d S )NzIocpProactor is closed)r‰   rH   )r   r   r   r   Ú_check_closedŒ  s    
zIocpProactor._check_closedc             C   sF   dt | jƒ dt | jƒ g}| jd kr0| d¡ d| jjd |¡f S )Nzoverlapped#=%sz
result#=%sr[   z<%s %s>ú )ÚlenrŠ   r†   r‰   r>   r   r2   Újoin)r   r"   r   r   r   Ú__repr__  s
    

zIocpProactor.__repr__c             C   s
   || _ d S )N)r*   )r   r   r   r   r   Úset_loop—  s    zIocpProactor.set_loopNc             C   s    | j s|  |¡ | j }g | _ |S )N)r†   r=   )r   ÚtimeoutrY   r   r   r   Úselectš  s
    
zIocpProactor.selectc             C   s   | j  ¡ }| |¡ |S )N)r*   rz   r0   )r   Úvaluer?   r   r   r   Ú_result¡  s    

zIocpProactor._resultr   c             C   sz   |   |¡ t t¡}y4t|tjƒr6| | ¡ ||¡ n| | ¡ |¡ W n t	k
rb   |  
d¡S X dd„ }|  |||¡S )Nó    c          
   S   sP   y|  ¡ S  tk
rJ } z$|jtjtjfkr8t|jŽ ‚n‚ W d d }~X Y nX d S )N)Ú	getresultr)   rB   rA   ÚERROR_NETNAME_DELETEDÚERROR_OPERATION_ABORTEDÚConnectionResetErrorr}   )rn   Úkeyr   r,   r   r   r   Úfinish_recv±  s    
z&IocpProactor.recv.<locals>.finish_recv)Ú_register_with_iocprA   Ú
Overlappedr\   Ú
isinstanceÚsocketZWSARecvrs   ZReadFileÚBrokenPipeErrorr–   Ú	_register)r   ÚconnÚnbytesr`   r   r   r   r   r   Úrecv¦  s    


zIocpProactor.recvc             C   sz   |   |¡ t t¡}y4t|tjƒr6| | ¡ ||¡ n| | ¡ |¡ W n t	k
rb   |  
d¡S X dd„ }|  |||¡S )Nr—   c          
   S   sP   y|  ¡ S  tk
rJ } z$|jtjtjfkr8t|jŽ ‚n‚ W d d }~X Y nX d S )N)r˜   r)   rB   rA   r™   rš   r›   r}   )rn   rœ   r   r,   r   r   r   r   È  s    
z+IocpProactor.recv_into.<locals>.finish_recv)rž   rA   rŸ   r\   r    r¡   ZWSARecvIntors   ZReadFileIntor¢   r–   r£   )r   r¤   Úbufr`   r   r   r   r   r   Ú	recv_into½  s    


zIocpProactor.recv_intoc             C   sZ   |   |¡ t t¡}t|tjƒr4| | ¡ ||¡ n| | ¡ |¡ dd„ }|  	|||¡S )Nc          
   S   sP   y|  ¡ S  tk
rJ } z$|jtjtjfkr8t|jŽ ‚n‚ W d d }~X Y nX d S )N)r˜   r)   rB   rA   r™   rš   r›   r}   )rn   rœ   r   r,   r   r   r   Úfinish_sendÜ  s    
z&IocpProactor.send.<locals>.finish_send)
rž   rA   rŸ   r\   r    r¡   ZWSASendrs   Z	WriteFiler£   )r   r¤   r§   r`   r   r©   r   r   r   ÚsendÔ  s    


zIocpProactor.sendc                sv   |   ˆ¡ |  ˆj¡‰ t t¡}| ˆ ¡ ˆ  ¡ ¡ ‡ ‡fdd„}dd„ }|  |ˆ|¡}||ˆ ƒ}t	j
|| jd |S )Nc                sD   |  ¡  t dˆ ¡ ¡}ˆ  tjtj|¡ ˆ  	ˆ 
¡ ¡ ˆ ˆ  ¡ fS )Nz@P)r˜   ÚstructÚpackrs   Ú
setsockoptr¡   Ú
SOL_SOCKETrA   ZSO_UPDATE_ACCEPT_CONTEXTÚ
settimeoutZ
gettimeoutZgetpeername)rn   rœ   r   r§   )r¤   Úlistenerr   r   Úfinish_acceptî  s    
z*IocpProactor.accept.<locals>.finish_acceptc             Ó   s4   y| I d H  W n  t jk
r.   | ¡  ‚ Y nX d S )N)r   rt   rc   )r&   r¤   r   r   r   Úaccept_coro÷  s
    z(IocpProactor.accept.<locals>.accept_coro)r   )rž   Ú_get_accept_socketÚfamilyrA   rŸ   r\   ZAcceptExrs   r£   r   Zensure_futurer*   )r   r°   r   r±   r²   r&   Úcoror   )r¤   r°   r   Úacceptè  s    

	
zIocpProactor.acceptc          
      s˜   |   ˆ ¡ yt ˆ  ¡ ˆ j¡ W nB tk
rb } z$|jtjkr@‚ ˆ  	¡ d dkrR‚ W d d }~X Y nX t 
t¡}| ˆ  ¡ |¡ ‡ fdd„}|  |ˆ |¡S )Nr   r   c                s   |  ¡  ˆ  tjtjd¡ ˆ S )Nr   )r˜   r­   r¡   r®   rA   ZSO_UPDATE_CONNECT_CONTEXT)rn   rœ   r   )r¤   r   r   Úfinish_connect  s    
z,IocpProactor.connect.<locals>.finish_connect)rž   rA   Z	BindLocalrs   r´   r)   rB   ÚerrnoZ	WSAEINVALZgetsocknamerŸ   r\   Z	ConnectExr£   )r   r¤   r!   Úer   r·   r   )r¤   r   Úconnect  s    

zIocpProactor.connectc       	   	   C   sb   |   |¡ t t¡}|d@ }|d? d@ }| | ¡ t | ¡ ¡|||dd¡ dd„ }|  |||¡S )Nl   ÿÿ é    r   c          
   S   sP   y|  ¡ S  tk
rJ } z$|jtjtjfkr8t|jŽ ‚n‚ W d d }~X Y nX d S )N)r˜   r)   rB   rA   r™   rš   r›   r}   )rn   rœ   r   r,   r   r   r   Úfinish_sendfile%  s    
z.IocpProactor.sendfile.<locals>.finish_sendfile)	rž   rA   rŸ   r\   ZTransmitFilers   ÚmsvcrtZget_osfhandler£   )	r   ZsockÚfileÚoffsetÚcountr   Z
offset_lowZoffset_highr¼   r   r   r   Úsendfile  s    



	zIocpProactor.sendfilec                sJ   |   ˆ ¡ t t¡}| ˆ  ¡ ¡}|r0|  ˆ ¡S ‡ fdd„}|  |ˆ |¡S )Nc                s   |  ¡  ˆ S )N)r˜   )rn   rœ   r   )rb   r   r   Úfinish_accept_pipe;  s    z4IocpProactor.accept_pipe.<locals>.finish_accept_pipe)rž   rA   rŸ   r\   ZConnectNamedPipers   r–   r£   )r   rb   r   Z	connectedrÂ   r   )rb   r   rr   0  s    


zIocpProactor.accept_pipec          
   Ã   sz   t }xjyt |¡}P W n0 tk
rF } z|jtjkr6‚ W d d }~X Y nX t|d tƒ}tj	|| j
dI d H  qW t |¡S )Né   )r   )ÚCONNECT_PIPE_INIT_DELAYrA   ZConnectPiper)   rB   ZERROR_PIPE_BUSYÚminÚCONNECT_PIPE_MAX_DELAYr   Zsleepr*   r	   r]   )r   r!   Zdelayr:   r,   r   r   r   ri   A  s    
zIocpProactor.connect_pipec             C   s   |   ||d¡S )NF)Ú_wait_for_handle)r   r:   r“   r   r   r   Úwait_for_handleT  s    zIocpProactor.wait_for_handlec             C   s   |   |d d¡}||_|S )NT)rÇ   rF   )r   rG   Zdone_callbackr?   r   r   r   rP   \  s    zIocpProactor._wait_cancelc                s¢   |   ¡  |d krtj}nt |d ¡}t t¡}t || j	|j
|¡}|r\t|||| jd‰ nt|||| | jd‰ ˆ jr~ˆ jd= ‡ fdd„}ˆ |d|f| j|j
< ˆ S )Ng     @@)r   r   c                s   ˆ   ¡ S )N)r=   )rn   rœ   r   )rl   r   r   Úfinish_wait_for_handley  s    z=IocpProactor._wait_for_handle.<locals>.finish_wait_for_handler   )r   r<   ÚINFINITEÚmathÚceilrA   rŸ   r\   ZRegisterWaitWithQueuer‰   r!   rE   r*   rI   r   rŠ   )r   r:   r“   Z
_is_cancelÚmsr   r;   rÉ   r   )rl   r   rÇ   c  s     


	zIocpProactor._wait_for_handlec             C   s0   || j kr,| j  |¡ t | ¡ | jdd¡ d S )Nr   )r9   r^   rA   r‡   rs   r‰   )r   Úobjr   r   r   rž   …  s    
z IocpProactor._register_with_iocpc          
   C   sŠ   |   ¡  t|| jd}|jr$|jd= |jsry|d d |ƒ}W n, tk
rf } z| |¡ W d d }~X Y nX | |¡ ||||f| j|j	< |S )N)r   r   )
r   r   r*   r   r   r)   r/   r0   rŠ   r!   )r   r   rÎ   Úcallbackrl   r•   r¹   r   r   r   r£     s    

zIocpProactor._registerc             C   s   |   ¡  | j |¡ d S )N)r   r‹   r>   )r   r   r   r   r   rO   ¯  s    zIocpProactor._unregisterc             C   s   t   |¡}| d¡ |S )Nr   )r¡   r¯   )r   r´   Úsr   r   r   r³   ¹  s    

zIocpProactor._get_accept_socketc             C   sŒ  |d krt }n0|dk r tdƒ‚nt |d ¡}|t kr>tdƒ‚xt | j|¡}|d krZP d}|\}}}}y| j |¡\}}	}
}W nV t	k
rØ   | j
 ¡ rº| j
 dd||||f dœ¡ |dtjfkrÒt |¡ wBY nX |
| jkrî| ¡  qB| ¡ sBy||||	ƒ}W n: tk
r@ } z| |¡ | j |¡ W d d }~X Y qBX | |¡ | j |¡ qBW x | jD ]}	| j |	jd ¡ qdW | j ¡  d S )Nr   znegative timeoutg     @@ztimeout too bigz8GetQueuedCompletionStatus() returned an unexpected eventz)err=%s transferred=%s key=%#x address=%#x)r$   Ústatus)rÊ   Ú
ValueErrorrË   rÌ   rA   ZGetQueuedCompletionStatusr‰   rŠ   ÚpopÚKeyErrorr*   Z	get_debugr+   rˆ   r<   rN   rŒ   r(   Zdoner)   r/   r†   r>   r0   r‹   r!   rd   )r   r“   rÍ   rÑ   ÚerrZtransferredrœ   r!   rl   r   rÎ   rÏ   r•   r¹   r   r   r   r=   ¾  sJ    






zIocpProactor._pollc             C   s   | j  |¡ d S )N)rŒ   r^   )r   rÎ   r   r   r   Ú_stop_servingõ  s    zIocpProactor._stop_servingc             C   s   | j d krd S xšt| j ¡ ƒD ]ˆ\}\}}}}| ¡ r8qt|tƒrDqy| ¡  W q tk
r¤ } z6| j	d k	r”d||dœ}|j
rˆ|j
|d< | j	 |¡ W d d }~X Y qX qW d}t ¡ }	|	| }
xD| jr|
t ¡ kröt d| t ¡ |	 ¡ t ¡ | }
|  |¡ qÀW g | _t | j ¡ d | _ d S )NzCancelling a future failed)r$   r%   r&   r'   g      ð?z,%r is running after closing for %.1f seconds)r‰   ÚlistrŠ   ÚitemsZ	cancelledr    rE   r(   r)   r*   r   r+   ÚtimeZ	monotonicr
   Údebugr=   r†   r<   rN   )r   r!   r?   r   rÎ   rÏ   r,   r-   Z
msg_updateZ
start_timeZnext_msgr   r   r   rc   û  s:    
 


"
zIocpProactor.closec             C   s   |   ¡  d S )N)rc   )r   r   r   r   re   *  s    zIocpProactor.__del__)r…   )N)r   )r   )r   )N)N)r2   r3   r4   r   r   r‘   r’   r”   r–   r¦   r¨   rª   r¶   rº   rÁ   rr   ri   rÈ   rP   rÇ   rž   r£   rO   r³   r=   rÖ   rc   re   r   r   r   r   r     s2   






"
 

7/r   c               @   s   e Zd Zdd„ ZdS )r{   c       
         sP   t j|f|||||dœ|—Žˆ _‡ fdd„}ˆ jj tˆ jjƒ¡}	|	 |¡ d S )N)r~   r   r€   r   r‚   c                s   ˆ j  ¡ }ˆ  |¡ d S )N)Ú_procZpollZ_process_exited)rl   Ú
returncode)r   r   r   rÏ   5  s    
z4_WindowsSubprocessTransport._start.<locals>.callback)	r	   ÚPopenrÛ   r*   rJ   rÈ   Úintr7   ru   )
r   r}   r~   r   r€   r   r‚   rƒ   rÏ   rl   r   )r   r   Ú_start0  s    z"_WindowsSubprocessTransport._startN)r2   r3   r4   rß   r   r   r   r   r{   .  s   r{   c               @   s   e Zd ZeZdS )r   N)r2   r3   r4   r   Ú_loop_factoryr   r   r   r   r   @  s   r   c               @   s   e Zd ZeZdS )r   N)r2   r3   r4   r   rà   r   r   r   r   r   D  s   r   )-rA   r<   r¸   rË   r½   r¡   r«   rÙ   rS   Ú r   r   r   r   r   r   r	   Úlogr
   Ú__all__r\   rÊ   ZERROR_CONNECTION_REFUSEDZERROR_CONNECTION_ABORTEDrÄ   rÆ   ZFuturer   r6   rE   rI   ÚobjectrQ   ZBaseSelectorEventLooprf   ZBaseProactorEventLoopr   r   ZBaseSubprocessTransportr{   r   ZBaseDefaultEventLoopPolicyr   r   r   r   r   r   r   Ú<module>   sN   0J4;P   2