grthtrhthjhtyjytjytkergtrhtrjytjerhrfh3 \·lã@s‚ddlZddlZddlZddlZddlZddlZddlmZddlmZddlm Z ddlm Z ddlm Z ddlm Z dd lm Z dd lmZdd lmZdd lmZd dddgZdZdZdZdZdZdZGdd„de jƒZGdd„de jƒZGdd„deƒZGdd„deƒZGdd„deƒZ Gd d!„d!e j!ƒZ"Gd"d„de j#ƒZ$Gd#d„dƒZ%Gd$d%„d%ej&ƒZ'e"Z(Gd&d'„d'ej)ƒZ*e*Z+dS)(éNé)Úevents)Úbase_subprocess)Úfutures)Úproactor_events)Úselector_events)Útasks)Ú windows_utils)Ú _overlapped)Ú coroutine)ÚloggerÚSelectorEventLoopÚProactorEventLoopÚ IocpProactorÚDefaultEventLoopPolicylÿÿiÉiÔgü©ñÒMbP?gš™™™™™¹?csZeZdZddœ‡fdd„ Z‡fdd„Zdd„Z‡fd d „Z‡fd d „Z‡fd d„Z‡Z S)Ú_OverlappedFutureN)Úloopcs&tƒj|d�|jr|jd=||_dS)N)rréÿÿÿÿ)ÚsuperÚ__init__Ú_source_tracebackÚ_ov)ÚselfÚovr)Ú __class__©ú./usr/lib64/python3.6/asyncio/windows_events.pyr-sz_OverlappedFuture.__init__cs@tƒjƒ}|jdk r<|jjr dnd}|jdd||jjfƒ|S)NÚpendingZ completedrzoverlapped=<%s, %#x>)rÚ _repr_inforrÚinsertÚaddress)rÚinfoÚstate)rrrr3s   z_OverlappedFuture._repr_infocCsr|jdkrdSy|jjƒWnJtk rf}z.d||dœ}|jrJ|j|d<|jj|ƒWYdd}~XnXd|_dS)Nz&Cancelling an overlapped future failed)ÚmessageÚ exceptionÚfutureÚsource_traceback)rÚcancelÚOSErrorrÚ_loopÚcall_exception_handler)rÚexcÚcontextrrrÚ_cancel_overlapped:s  z$_OverlappedFuture._cancel_overlappedcs|jƒtƒjƒS)N)r-rr')r)rrrr'Jsz_OverlappedFuture.cancelcstƒj|ƒ|jƒdS)N)rÚ set_exceptionr-)rr$)rrrr.Ns z_OverlappedFuture.set_exceptioncstƒj|ƒd|_dS)N)rÚ set_resultr)rÚresult)rrrr/Rs z_OverlappedFuture.set_result) Ú__name__Ú __module__Ú __qualname__rrr-r'r.r/Ú __classcell__rr)rrr's    rcsjeZdZddœ‡fdd„ Zdd„Z‡fdd„Zd d „Zd d „Z‡fd d„Z‡fdd„Z ‡fdd„Z ‡Z S)Ú_BaseWaitHandleFutureN)rcs8tƒj|d�|jr|jd=||_||_||_d|_dS)N)rrTr)rrrrÚ_handleÚ _wait_handleÚ _registered)rrÚhandleÚ wait_handler)rrrrZsz_BaseWaitHandleFuture.__init__cCstj|jdƒtjkS)Nr)Ú_winapiZWaitForSingleObjectr6Z WAIT_OBJECT_0)rrrrÚ_pollhs z_BaseWaitHandleFuture._pollcs\tƒjƒ}|jd|jƒ|jdk r>|jƒr0dnd}|j|ƒ|jdk rX|jd|jƒ|S)Nz handle=%#xZsignaledZwaitingzwait_handle=%#x)rrÚappendr6r<r7)rr!r")rrrrms    z _BaseWaitHandleFuture._repr_infocCs d|_dS)N)r)rÚfutrrrÚ_unregister_wait_cbwsz)_BaseWaitHandleFuture._unregister_wait_cbcCs”|js dSd|_|j}d|_ytj|ƒWnZtk r„}z>|jtjkrtd||dœ}|jrd|j|d<|jj |ƒdSWYdd}~XnX|j dƒdS)NFz$Failed to unregister the wait handle)r#r$r%r&) r8r7r ZUnregisterWaitr(ÚwinerrorÚERROR_IO_PENDINGrr)r*r?)rr:r+r,rrrÚ_unregister_wait|s"   z&_BaseWaitHandleFuture._unregister_waitcs|jƒtƒjƒS)N)rBrr')r)rrrr'”sz_BaseWaitHandleFuture.cancelcs|jƒtƒj|ƒdS)N)rBrr.)rr$)rrrr.˜sz#_BaseWaitHandleFuture.set_exceptioncs|jƒtƒj|ƒdS)N)rBrr/)rr0)rrrr/œsz _BaseWaitHandleFuture.set_result) r1r2r3rr<rr?rBr'r.r/r4rr)rrr5Ws   r5csBeZdZddœ‡fdd„ Zdd„Z‡fdd„Z‡fd d „Z‡ZS) Ú_WaitCancelFutureN)rcstƒj||||d�d|_dS)N)r)rrÚ_done_callback)rrÚeventr:r)rrrr¦sz_WaitCancelFuture.__init__cCs tdƒ‚dS)Nz'_WaitCancelFuture must not be cancelled)Ú RuntimeError)rrrrr'«sz_WaitCancelFuture.cancelcs$tƒj|ƒ|jdk r |j|ƒdS)N)rr/rD)rr0)rrrr/®s  z_WaitCancelFuture.set_resultcs$tƒj|ƒ|jdk r |j|ƒdS)N)rr.rD)rr$)rrrr.³s  z_WaitCancelFuture.set_exception)r1r2r3rr'r/r.r4rr)rrrC¡s rCcs6eZdZddœ‡fdd„ Z‡fdd„Zdd„Z‡ZS) Ú_WaitHandleFutureN)rcs<tƒj||||d�||_d|_tjddddƒ|_d|_dS)N)rTF)rrÚ _proactorZ_unregister_proactorr Z CreateEventÚ_eventÚ _event_fut)rrr9r:Úproactorr)rrrrºs z_WaitHandleFuture.__init__csF|jdk r"tj|jƒd|_d|_|jj|jƒd|_tƒj|ƒdS)N) rIr;Ú CloseHandlerJrHÚ _unregisterrrr?)rr>)rrrr?Ás   z%_WaitHandleFuture._unregister_wait_cbcCs¢|js dSd|_|j}d|_ytj||jƒWnZtk rˆ}z>|jtjkrxd||dœ}|jrh|j|d<|j j |ƒdSWYdd}~XnX|j j |j|j ƒ|_dS)NFz$Failed to unregister the wait handle)r#r$r%r&)r8r7r ZUnregisterWaitExrIr(r@rArr)r*rHÚ _wait_cancelr?rJ)rr:r+r,rrrrBÓs$    z"_WaitHandleFuture._unregister_wait)r1r2r3rr?rBr4rr)rrrG¹s rGc@s8eZdZdd„Zdd„Zdd„Zdd„Zd d „ZeZd S) Ú PipeServercCs,||_tjƒ|_d|_d|_|jdƒ|_dS)NT)Ú_addressÚweakrefÚWeakSetÚ_free_instancesÚ_pipeÚ_accept_pipe_futureÚ_server_pipe_handle)rr rrrròs  zPipeServer.__init__cCs|j|jdƒ}|_|S)NF)rTrV)rÚtmprrrÚ_get_unconnected_pipeüsz PipeServer._get_unconnected_pipec Csr|jƒr dStjtjB}|r&|tjO}tj|j|tjtjBtj Btj t j t j tj tjƒ}t j|ƒ}|jj|ƒ|S)N)Úclosedr;ZPIPE_ACCESS_DUPLEXZFILE_FLAG_OVERLAPPEDZFILE_FLAG_FIRST_PIPE_INSTANCEZCreateNamedPiperPZPIPE_TYPE_MESSAGEZPIPE_READMODE_MESSAGEZ PIPE_WAITZPIPE_UNLIMITED_INSTANCESr ZBUFSIZEZNMPWAIT_WAIT_FOREVERÚNULLÚ PipeHandlerSÚadd)rÚfirstÚflagsÚhÚpiperrrrVs      zPipeServer._server_pipe_handlecCs |jdkS)N)rP)rrrrrYszPipeServer.closedcCsV|jdk r|jjƒd|_|jdk rRx|jD] }|jƒq,Wd|_d|_|jjƒdS)N)rUr'rPrSÚcloserTÚclear)rr`rrrras     zPipeServer.closeN) r1r2r3rrXrVrYraÚ__del__rrrrrOís   rOc@seZdZdd„ZdS)Ú_WindowsSelectorEventLoopcCstjƒS)N)r Ú socketpair)rrrrÚ _socketpair+sz%_WindowsSelectorEventLoop._socketpairN)r1r2r3rfrrrrrd(srdcsLeZdZd ‡fdd„ Zdd„Zedd„ƒZedd „ƒZed d d „ƒZ‡Z S)rNcs|dkrtƒ}tƒj|ƒdS)N)rrr)rrK)rrrr2szProactorEventLoop.__init__cCstjƒS)N)r re)rrrrrf7szProactorEventLoop._socketpairccs8|jj|ƒ}|EdH}|ƒ}|j||d|id�}||fS)NÚaddr)Úextra)rHÚ connect_pipeÚ_make_duplex_pipe_transport)rÚprotocol_factoryr Úfr`ÚprotocolÚtransrrrÚcreate_pipe_connection:s    z(ProactorEventLoop.create_pipe_connectioncs.tˆƒ‰d‡‡‡‡‡fdd„ ‰ˆjˆƒˆgS)Ncsd}yj|rL|jƒ}ˆjj|ƒˆjƒr2|jƒdSˆƒ}ˆj||dˆid�ˆjƒ}|dkr`dSˆjj|ƒ}Wn„t k rÒ}zH|r¬|j ƒd kr¬ˆj d||dœƒ|jƒnˆj rÂt jd|dd�WYdd}~Xn2tjk rò|rî|jƒYnX|ˆ_|jˆƒdS) Nrg)rhrzPipe accept failed)r#r$r`zAccept pipe failed on pipe %rT)Úexc_infor)r0rSÚdiscardrYrarjrXrHÚ accept_piper(Úfilenor*Z_debugr ZwarningrÚCancelledErrorrUÚadd_done_callback)rlr`rmr+)r Úloop_accept_piperkrÚserverrrrvGs<   z>ProactorEventLoop.start_serving_pipe..loop_accept_pipe)N)rOZ call_soon)rrkr r)r rvrkrrwrÚstart_serving_pipeCs( z$ProactorEventLoop.start_serving_pipec ksŒ|jƒ} t||||||||f| |dœ| —Ž} y| EdHWn&tk r`} z | } WYdd} ~ XnXd} | dk rˆ| jƒ| jƒEdH| ‚| S)N)Úwaiterrh)Ú create_futureÚ_WindowsSubprocessTransportÚ ExceptionraZ_wait)rrmÚargsÚshellÚstdinÚstdoutÚstderrÚbufsizerhÚkwargsryZtranspr+ÚerrrrrÚ_make_subprocess_transportrs  z,ProactorEventLoop._make_subprocess_transport)N)N) r1r2r3rrfr rorxr…r4rr)rrr/s  /c@sÌeZdZd0dd„Zdd„Zdd„Zd1d d „Zd d „Zd2dd„Zd3dd„Z dd„Z dd„Z dd„Z e dd„ƒZd4dd„Zdd„Zdd„Zd d!„Zd"d#„Zd$d%„Zd&d'„Zd5d(d)„Zd*d+„Zd,d-„Zd.d/„ZdS)6rìÿÿcCsDd|_g|_tjtjtd|ƒ|_i|_tj ƒ|_ g|_ tj ƒ|_ dS)Nr) r)Ú_resultsr ÚCreateIoCompletionPortÚINVALID_HANDLE_VALUErZÚ_iocpÚ_cacherQrRr8Ú _unregisteredÚ_stopped_serving)rZ concurrencyrrrr�s zIocpProactor.__init__cCsd|jjt|jƒt|jƒfS)Nz<%s overlapped#=%s result#=%s>)rr1Úlenr‹r‡)rrrrÚ__repr__™szIocpProactor.__repr__cCs ||_dS)N)r))rrrrrÚset_loopžszIocpProactor.set_loopNcCs |js|j|ƒ|j}g|_|S)N)r‡r<)rÚtimeoutrWrrrÚselect¡s  zIocpProactor.selectcCs|jjƒ}|j|ƒ|S)N)r)rzr/)rÚvaluer>rrrÚ_result¨s  zIocpProactor._resultrc Csz|j|ƒtjtƒ}y4t|tjƒr6|j|jƒ||ƒn|j|jƒ|ƒWnt k rb|j dƒSXdd„}|j |||ƒS)NócSsJy|jƒStk rD}z |jtjkr2t|jŽ‚n‚WYdd}~XnXdS)N)Ú getresultr(r@r ÚERROR_NETNAME_DELETEDÚConnectionResetErrorr})rnÚkeyrr+rrrÚ finish_recv¸s   z&IocpProactor.recv..finish_recv) Ú_register_with_iocpr Ú OverlappedrZÚ isinstanceÚsocketZWSARecvrsZReadFileÚBrokenPipeErrorr”Ú _register)rÚconnÚnbytesr^rršrrrÚrecv­s     zIocpProactor.recvcCsZ|j|ƒtjtƒ}t|tjƒr4|j|jƒ||ƒn|j|jƒ|ƒdd„}|j |||ƒS)NcSsJy|jƒStk rD}z |jtjkr2t|jŽ‚n‚WYdd}~XnXdS)N)r–r(r@r r—r˜r})rnr™rr+rrrÚ finish_sendËs   z&IocpProactor.send..finish_send) r›r rœrZr�ržZWSASendrsZ WriteFiler )rr¡Úbufr^rr¤rrrÚsendÃs    zIocpProactor.sendcsz|jˆƒ|jˆjƒ‰tjtƒ}|jˆjƒˆjƒƒ‡‡fdd„}tdd„ƒ}|j |ˆ|ƒ}||ˆƒ}t j ||j d�|S)NcsD|jƒtjdˆjƒƒ}ˆjtjtj|ƒˆj ˆj ƒƒˆˆj ƒfS)Nz@P) r–ÚstructZpackrsÚ setsockoptržÚ SOL_SOCKETr ZSO_UPDATE_ACCEPT_CONTEXTÚ settimeoutZ gettimeoutZ getpeername)rnr™rr¥)r¡ÚlistenerrrÚ finish_acceptÜs  z*IocpProactor.accept..finish_acceptc ss4y|EdHWn tjk r.|jƒ‚YnXdS)N)rrtra)r%r¡rrrÚ accept_coroås z(IocpProactor.accept..accept_coro)r) r›Ú_get_accept_socketÚfamilyr rœrZZAcceptExrsr r rZ ensure_futurer))rr«rr¬r­r%Úcoror)r¡r«rÚacceptÖs     zIocpProactor.acceptcs˜|jˆƒytjˆjƒˆjƒWnBtk rb}z&|jtjkr@‚ˆj ƒddkrR‚WYdd}~XnXtj t ƒ}|j ˆjƒ|ƒ‡fdd„}|j |ˆ|ƒS)Nrrcs|jƒˆjtjtjdƒˆS)Nr)r–r¨ržr©r ZSO_UPDATE_CONNECT_CONTEXT)rnr™r)r¡rrÚfinish_connects z,IocpProactor.connect..finish_connect)r›r Z BindLocalrsr¯r(r@ÚerrnoZ WSAEINVALZ getsocknamerœrZZ ConnectExr )rr¡r Úerr²r)r¡rÚconnectós    zIocpProactor.connectcsJ|jˆƒtjtƒ}|jˆjƒƒ}|r0|jˆƒS‡fdd„}|j|ˆ|ƒS)Ncs |jƒˆS)N)r–)rnr™r)r`rrÚfinish_accept_pipesz4IocpProactor.accept_pipe..finish_accept_pipe)r›r rœrZZConnectNamedPipersr”r )rr`rZ connectedr¶r)r`rrr s    zIocpProactor.accept_pipeccszt}xjytj|ƒ}PWn0tk rF}z|jtjkr6‚WYdd}~XnXt|dtƒ}tj ||j d�EdHqWt j |ƒS)Né)r) ÚCONNECT_PIPE_INIT_DELAYr Z ConnectPiper(r@ZERROR_PIPE_BUSYÚminÚCONNECT_PIPE_MAX_DELAYrZsleepr)r r[)rr Zdelayr9r+rrrris  zIocpProactor.connect_pipecCs|j||dƒS)NF)Ú_wait_for_handle)rr9r‘rrrÚwait_for_handle/szIocpProactor.wait_for_handlecCs|j|ddƒ}||_|S)NT)r»rD)rrEZ done_callbackr>rrrrN7szIocpProactor._wait_cancelcsš|dkrtj}ntj|dƒ}tjtƒ}tj||j|j |ƒ}|rTt ||||j d�‰nt |||||j d�‰ˆj rvˆj d=‡fdd„}ˆ|d|f|j|j <ˆS)Ng@�@)rrcsˆjƒS)N)r<)rnr™r)rlrrÚfinish_wait_for_handleRsz=IocpProactor._wait_for_handle..finish_wait_for_handlerr)r;ÚINFINITEÚmathÚceilr rœrZZRegisterWaitWithQueuerŠr rCr)rGrr‹)rr9r‘Z _is_cancelÚmsrr:r½r)rlrr»>s    zIocpProactor._wait_for_handlecCs0||jkr,|jj|ƒtj|jƒ|jddƒdS)Nr)r8r\r rˆrsrŠ)rÚobjrrrr›^s  z IocpProactor._register_with_iocpcCs‚t||jd�}|jr|jd=|jsjy|dd|ƒ}Wn,tk r^}z|j|ƒWYdd}~Xn X|j|ƒ||||f|j|j<|S)N)rrr) rr)rrr(r.r/r‹r )rrrÂÚcallbackrlr“r´rrrr hs zIocpProactor._registercCs|jj|ƒdS)N)rŒr=)rrrrrrM†szIocpProactor._unregistercCstj|ƒ}|jdƒ|S)Nr)ržrª)rr¯Úsrrrr®�s  zIocpProactor._get_accept_socketcCsŒ|dkrt}n0|dkr tdƒ‚ntj|dƒ}|tkr>tdƒ‚�xtj|j|ƒ}|dkrZPd}|\}}}}y|jj|ƒ\}} } } WnVt k rØ|j j ƒrº|j j dd||||fdœƒ|dtj fkrÒtj|ƒwBYnX| |jkrî|jƒqB|jƒsBy| ||| ƒ} Wn:tk �r@} z|j| ƒ|jj|ƒWYdd} ~ XqBX|j| ƒ|jj|ƒqBWx |jD]} |jj| jdƒ�qdW|jjƒdS)Nrznegative 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;rLr�r'Údoner(r.r‡r=r/rŒr rb)rr‘rÁrÅr„Z transferredr™r rlrrÂrÃr“r´rrrr<”sJ         zIocpProactor._pollcCs|jj|ƒdS)N)r�r\)rrÂrrrÚ _stop_servingËszIocpProactor._stop_servingcCsâxšt|jjƒƒD]ˆ\}\}}}}|jƒr*qt|tƒr6qy |jƒWqtk r–}z8|jdk r†d||dœ}|j rz|j |d<|jj |ƒWYdd}~XqXqWx|jrº|j dƒsžt j dƒqžWg|_|jdk rÞtj|jƒd|_dS)NzCancelling a future failed)r#r$r%r&rz"taking long time to close proactor)Úlistr‹ÚitemsZ cancelledr�rCr'r(r)rr*r<r Údebugr‡rŠr;rL)rr r>rrÂrÃr+r,rrrraÑs,     "   zIocpProactor.closecCs |jƒdS)N)ra)rrrrrcñszIocpProactor.__del__)r†)N)r)r)N)N)r1r2r3rr�r�r’r”r£r¦r±rµrrr rir¼rNr»r›r rMr®r<rÊrarcrrrrrŒs,          7 c@seZdZdd„ZdS)r{c  sPtj|f|||||dœ|—Žˆ_‡fdd„}ˆjjjtˆjjƒƒ} | j|ƒdS)N)r~rr€r�r‚csˆjjƒ}ˆj|ƒdS)N)Ú_procZpollZ_process_exited)rlÚ returncode)rrrrÃüs z4_WindowsSubprocessTransport._start..callback) r ÚPopenrÎr)rHr¼Úintr6ru) rr}r~rr€r�r‚rƒrÃrlr)rrÚ_start÷s   z"_WindowsSubprocessTransport._startN)r1r2r3rÒrrrrr{õsr{c@seZdZeZdS)Ú_WindowsDefaultEventLoopPolicyN)r1r2r3r Z _loop_factoryrrrrrÓsrÓ),r;r³r¿ržr§rQÚrrrrrrr r Z coroutinesr Úlogr Ú__all__rZr¾ZERROR_CONNECTION_REFUSEDZERROR_CONNECTION_ABORTEDr¸rºZFuturerr5rCrGÚobjectrOZBaseSelectorEventLooprdZBaseProactorEventLooprrZBaseSubprocessTransportr{r ZBaseDefaultEventLoopPolicyrÓrrrrrÚsJ          0J4;]k