й¼]¶gã @s=dddddddddd d d d g Zd dlZd dlZd dlZd dlZd dlZd dlZd dlZddl m Z ddl m Z ddl m Z ddl m Z ddl mZGdd„de jƒZej jZej jZej jZedddddedd„ƒZdd„Zedddd„ƒZedd„ƒZdddddd„Zedddd d„ƒZddd!d"„ZeeƒdCs z!Task.all_tasks..)rrÚ _all_tasks)rrr)rrÚ all_tasks;s  zTask.all_tasksrcsktƒjd|ƒ|jr&|jd=||_d|_d|_|jj|jƒ|j j j |ƒdS)NrrFéÿÿÿÿ) ÚsuperÚ__init__Ú_source_tracebackÚ_coroÚ _fut_waiterÚ _must_cancelrÚ call_soonÚ_stepÚ __class__r!Úadd)ÚselfÚcoror)r,rrr%Es     z Task.__init__cCsg|jtjkrS|jrSd|ddi}|jrC|j|d<|jj|ƒtjj|ƒdS)NÚtaskÚmessagez%Task was destroyed but it is pending!Zsource_traceback) Ú_staterZ_PENDINGÚ_log_destroy_pendingr&rZcall_exception_handlerÚFutureÚ__del__)r.Úcontextrrrr5Ts   z Task.__del__csrtƒjƒ}|jr"d|déz wait_for=%r)r$Ú _repr_infor)rZ_format_coroutiner'Úinsertr()r.Úinfor/)r,rrr8_s  zTask._repr_infoÚlimitc Cs g}y|jj}Wntk r6|jj}YnX|dk rœxI|dk rŽ|dk ru|dkrkP|d8}|j|ƒ|j}qFW|jƒnj|jdk r|jj}xL|dk r|dk ré|dkrßP|d8}|j|j ƒ|j }qºW|S)Nrr) r'Úcr_frameÚAttributeErrorÚgi_frameÚappendÚf_backÚreverseÚ _exceptionÚ __traceback__Útb_frameÚtb_next)r.r;ZframesÚfÚtbrrrÚ get_stackms0             zTask.get_stackÚfilec Cs]g}tƒ}x•|jd|ƒD]�}|j}|j}|j}|j} ||krr|j|ƒtj|ƒtj |||j ƒ} |j ||| | fƒq"W|j } |sÍt d|d|ƒn7| dk rðt d|d|ƒnt d|d|ƒtj|d|ƒ| dk rYx3tj| j| ƒD]} t | d|ddƒq9WdS)Nr;zNo stack for %rrIz)Traceback for %r (most recent call last):z%Stack for %r (most recent call last):ÚendÚ)ÚsetrHÚf_linenoÚf_codeÚ co_filenameÚco_namer-Ú linecacheÚ checkcacheÚgetlineÚ f_globalsr?rBÚprintÚ tracebackÚ print_listÚformat_exception_onlyr,) r.r;rIÚextracted_listZcheckedrFÚlinenoÚcoÚfilenameÚnameÚlineÚexcrrrÚ print_stackœs0               zTask.print_stackcCsHd|_|jƒrdS|jdk r;|jjƒr;dSd|_dS)NFT)Z_log_tracebackÚdoner(Úcancelr))r.rrrrb¿s   z Task.cancelcs|jr0t|tjƒs'tjƒ}d|_|j}d|_||jj|j.)rÚisfuturerÚ iscoroutineÚ TypeErrorÚtyperxÚ ValueErrorrrrrprrrLÚ_wait)Úfsrr~rr)rrrLs   cGs|jƒs|jdƒdS)N)rarj)ÚwaiterÚargsrrrÚ_release_waiterls r‰ccs |dkrtjƒ}|dkr-|EdHS|jƒ}|j|t|ƒ}tjt|ƒ}t|d|ƒ}|j|ƒz|y |EdHWn/t j k rÀ|j |ƒ|j ƒ‚YnX|j ƒr×|jƒS|j |ƒ|j ƒt jƒ‚Wd|j ƒXdS)Nr)rrÚ create_futureÚ call_laterr‰Ú functoolsÚpartialr rqrreÚremove_done_callbackrbraruÚ TimeoutError)Úfutr~rr‡Útimeout_handleÚcbrrrrqs,             c #s|jƒ‰d‰|dk r3|j|tˆƒ‰t|ƒ‰‡‡‡‡fdd†}x|D]}|j|ƒqaWz ˆEdHWdˆdk ržˆjƒXtƒtƒ}}xD|D]<}|j|ƒ|jƒrè|j |ƒq¹|j |ƒq¹W||fS)Ncs€ˆd8‰ˆdksMˆtksMˆtkr||jƒ r||jƒdk r|ˆdk rcˆjƒˆjƒs|ˆjdƒdS)Nrr)rrÚ cancelledÚ exceptionrbrarj)rF)Úcounterrr‘r‡rrÚ_on_completion¬s      z_wait.._on_completion) rŠr‹r‰ÚlenrqrbrLrŽrar-)r†r~rrr–rFraÚpendingr)r•rr‘r‡rr…Ÿs&          r…c#sLtj|ƒstj|ƒr7tdt|ƒjƒ‚ˆdk rIˆn tjƒ‰‡fdd†t |ƒDƒ‰ddl m }|dˆƒ‰d‰‡‡‡fdd†}‡‡‡fd d †‰t ‡fd d †ƒ}xˆD]}|j ˆƒqèWˆr#|dk r#ˆj||ƒ‰x"ttˆƒƒD]}|ƒVq6WdS) Nz expect a list of futures, not %scs"h|]}t|dˆƒ’qS)r)r )rrF)rrrr ás zas_completed..r)ÚQueuercs9x(ˆD] }|jˆƒˆjdƒqWˆjƒdS)N)rŽÚ put_nowaitÚclear)rF)r–raÚtodorrÚ _on_timeoutæs  z!as_completed.._on_timeoutcsEˆs dSˆj|ƒˆj|ƒˆ rAˆdk rAˆjƒdS)N)Úremoveršrb)rF)rar‘rœrrr–ìs   z$as_completed.._on_completionc3s0ˆjƒEdH}|dkr&tj‚|jƒS)N)rrr�ru)rF)rarrÚ _wait_for_oneôs  z#as_completed.._wait_for_one)rr€rr�r‚rƒrxrrrLÚqueuesr™rrqr‹Úranger—)r†rr~r™r�rŸrFÚ_r)r–rarr‘rœrrÌs  c csv|dkrdV|S|dkr-tjƒ}|jƒ}|jj|tj||ƒ}z |EdHSWd|jƒXdS)Nr)rrrŠrr‹rZ_set_result_unless_cancelledrb)ÚdelayrurrwÚhrrrrs       cCs&tjdtddƒt|d|ƒS)Nz;asyncio.async() function is deprecated, use ensure_future()Ú stacklevelr7r)ÚwarningsÚwarnÚDeprecationWarningr )Úcoro_or_futurerrrrÚasync_s rªcCsÅtj|ƒr:|dk r6||jk r6tdƒ‚|Stj|ƒr‡|dkratjƒ}|j|ƒ}|j rƒ|j d=|St j rµt j |ƒrµtt|ƒd|ƒStdƒ‚dS)Nz$loop argument must agree with Futurerrz:An asyncio.Future, a coroutine or an awaitable is requiredr#)rr€rr„rr�rrZ create_taskr&rZPY35rsZ isawaitabler Ú_wrap_awaitabler‚)r©rr0rrrr +s     ccs|jƒEdHS)N)Ú __await__)Z awaitablerrrr«Bsr«cs4eZdZdd‡fdd†Zdd„Z‡S)Ú_GatheringFuturerNcs tƒjd|ƒ||_dS)Nr)r$r%Ú _children)r.Úchildrenr)r,rrr%Tsz_GatheringFuture.__init__cCs@|jƒrdSd}x#|jD]}|jƒr d}q W|S)NFT)rar®rb)r.ÚretZchildrrrrbXs   z_GatheringFuture.cancel)rxryrzr%rbrr)r,rr­Ls r­Úreturn_exceptionsFcs|s;|dkrtjƒ}|jƒ‰ˆjgƒˆSi‰x™t|ƒD]‹}tj|ƒs–t|d|ƒ}|dkrŠ|j}d|_ n9|}|dkr´|j}n|j|k rÏt dƒ‚|ˆ|’s zgather..rcsLjjƒr&|jƒs"|jƒdS|jƒrXtjƒ}ˆs–ˆj|ƒdSn>|jdk r�|jƒ}ˆs–ˆj|ƒdSn |j}|ˆ|<ˆd7‰ˆˆkrÈjˆƒdS)Nr) rar“r”rrerirBÚ_resultrj)Úir�Úres)Ú nchildrenÚ nfinishedÚouterÚresultsr±rrÚ_done_callback˜s&            zgather.._done_callback)rrrŠrjrLrr€r rr3r„r—r­Ú enumeraterqrŒr�)rr±Zcoros_or_futuresr²r�r¯r¼r¶r)r³r¸r¹rºr»r±rr bs8            csZt|d|ƒ}|jƒr"|S|j}|jƒ‰‡fdd†}|j|ƒˆS)Nrcs~ˆjƒr&|jƒs"|jƒdS|jƒr?ˆjƒn;|jƒ}|dk rgˆj|ƒnˆj|jƒƒdS)N)r“r”rbrirjru)Úinnerr_)rºrrr¼×s       zshield.._done_callback)r rarrŠrq)r²rr¾r¼r)rºrr ¶s    csStjˆƒstdƒ‚tjjƒ‰‡‡‡fdd†}ˆj|ƒˆS)NzA coroutine object is requiredcshy tjtˆdˆƒˆƒWnAtk rc}z!ˆjƒrNˆj|ƒ‚WYdd}~XnXdS)Nr)rZ _chain_futurer rlÚset_running_or_notify_cancelri)r_)r/rwrrrÚcallbackôs    z*run_coroutine_threadsafe..callback)rr�r‚Ú concurrentrr4Zcall_soon_threadsafe)r/rrÀr)r/rwrrr ës   )#Ú__all__Úconcurrent.futuresrÁrŒrsrQrVr¦r{rKrrrrrr4rrrrrr‰rr…rrrªÚglobalsrxr r«r­r r r rrrrÚsN        ÿ0    --8   T5