U if@srdZddlZddlZddlZddlZddlZddlZddlZddl Z ddl m Z ddl m Z ddl m Z ddl mZddl mZdd l mZedjZdAd d ZdBd d ZdCddZddZGdddejZeZz ddlZWnek rYn XejZZddddZejjZejj Z ejj!Z!dde!dddZ"ddZ#ddddZ$dd Z%d!d"Z&ddd#d$d%Z'ej(d&d'Z)dDddd(d)Z*ddd*d+Z+ej(d,d-Z,ee,_Gd.d/d/ej-Z.dd0d1d2d3Z/ddd4d5Z0d6d7Z1e 2Z3iZ4d8d9Z5d:d;Z6dd?Z8e5Z9e8Z:e6Z;e7Ze6Z?e7Z@dS)E)Task create_taskFIRST_COMPLETEDFIRST_EXCEPTION ALL_COMPLETEDwaitwait_for as_completedsleepgathershield ensure_futurerun_coroutine_threadsafe current_task all_tasks_register_task_unregister_task _enter_task _leave_taskN) base_tasks) coroutines)events) exceptions)futures) _is_coroutinecCs|dkrt}t|SN)rget_running_loop_current_tasksgetloopr"2/opt/alt/python38/lib64/python3.8/asyncio/tasks.pyr"srcs^dkrtd}z tt}WqLtk rF|d7}|dkrBYqXqLqfdd|DS)Nrrcs&h|]}t|kr|s|qSr")r _get_loopdone.0tr r"r# <szall_tasks..)rrlist _all_tasks RuntimeErrorr!iZtasksr"r r#r)s rcs^dkrtd}z tt}WqLtk rF|d7}|dkrBYqXqLqfdd|DS)Nrrr$csh|]}t|kr|qSr")rr%r'r r"r#r*Usz$_all_tasks_compat..)rget_event_loopr+r,r-r.r"r r#_all_tasks_compat@s r1cCs4|dk r0z |j}Wntk r&Yn X||dSr)set_nameAttributeError)tasknamer2r"r"r#_set_task_nameXs  r6cseZdZdZed$ddZed%ddZdddfdd Zfd d Zd d Z ddZ ddZ ddZ ddZ ddZddddZdddddZddZd&fd d! Zd"d#ZZS)'rTNcCs(tjdtdd|dkr t}t|S)NzVTask.current_task() is deprecated since Python 3.7, use asyncio.current_task() instead stacklevel)warningswarnDeprecationWarningrr0rclsr!r"r"r#rtszTask.current_taskcCstjdtddt|S)NzPTask.all_tasks() is deprecated since Python 3.7, use asyncio.all_tasks() insteadr7r8)r:r;r<r1r=r"r"r#rs zTask.all_tasks)r!r5cstj|d|jr|jd=t|s:d|_td||dkrRdt|_n t ||_d|_ d|_ ||_ t |_|jj|j|jdt|dS)Nr Fza coroutine was expected, got zTask-context)super__init___source_tracebackr iscoroutine_log_destroy_pending TypeError_task_name_counter_namestr _must_cancel _fut_waiter_coro contextvarsZ copy_context_context_loop call_soon _Task__stepr)selfcoror!r5 __class__r"r#rCs   z Task.__init__csF|jtjkr8|jr8|dd}|jr,|j|d<|j|tdS)Nz%Task was destroyed but it is pending!)r4messageZsource_traceback) Z_staterZ_PENDINGrFrDrPZcall_exception_handlerrB__del__)rSrArUr"r#rXs  z Task.__del__cCs t|Sr)rZ_task_repr_inforSr"r"r# _repr_infoszTask._repr_infocCs|jSr)rMrYr"r"r#get_corosz Task.get_corocCs|jSr)rIrYr"r"r#get_namesz Task.get_namecCst||_dSr)rJrI)rSvaluer"r"r#r2sz Task.set_namecCs tddS)Nz*Task does not support set_result operationr-)rSresultr"r"r# set_resultszTask.set_resultcCs tddS)Nz-Task does not support set_exception operationr^)rS exceptionr"r"r# set_exceptionszTask.set_exception)limitcCs t||Sr)rZ_task_get_stack)rSrcr"r"r# get_stackszTask.get_stack)rcfilecCst|||Sr)rZ_task_print_stack)rSrcrer"r"r# print_stacks zTask.print_stackcCs4d|_|rdS|jdk r*|jr*dSd|_dSNFT)Z_log_tracebackr&rLcancelrKrYr"r"r#rhs  z Task.cancelc s|rtd|d||jr>t|tjs8t}d|_|j}d|_t|j |zfz"|dkrp| d}n | |}Wnt k r}z*|jrd|_tnt|jW5d}~XYntjk rtYnttfk r}zt|W5d}~XYntk rL}zt|W5d}~XYnpXt|dd}|dk r@t||j k rtd|d|d}|j j|j||jdn|r||krtd |}|j j|j||jdn8d|_|j|j|jd||_|jr>|jr>d|_n*td |d |}|j j|j||jdn||dkr`|j j|j|jdn\t !|rtd |d |}|j j|j||jdn$td |}|j j|j||jdW5t |j |d}XdS)Nz_step(): already done: z, F_asyncio_future_blockingzTask z got Future z attached to a different loopr@zTask cannot await on itself: z-yield was used instead of yield from in task z with z;yield was used instead of yield from for generator in task zTask got bad yield: )"r&rZInvalidStateErrorrK isinstanceCancelledErrorrMrLrrPrsendthrow StopIterationrBrhr`r]KeyboardInterrupt SystemExitrb BaseExceptiongetattrrr%r-rQrRrOriadd_done_callback _Task__wakeupinspectZ isgenerator)rSexcrTr_Zblockingnew_excrUr"r#Z__steps               z Task.__stepc CsJz |Wn,tk r8}z||W5d}~XYn X|d}dSr)r_rqrR)rSfuturervr"r"r#Z__wakeup[s  z Task.__wakeup)N)N)N)__name__ __module__ __qualname__rF classmethodrrrCrXrZr[r\r2r`rbrdrfrhrRrt __classcell__r"r"rUr#rbs$    !Tr)r5cCs t}||}t|||Sr)rrrr6)rTr5r!r4r"r"r#rxs  r)r!timeout return_whencst|st|r(tdt|j|s4td|tt t fkrPtd|dkrbt nt jdtddfddt|D}t|||IdHS) Nzexpect a list of futures, not z#Set of coroutines/Futures is empty.zInvalid return_when value: [The loop argument is deprecated since Python 3.8, and scheduled for removal in Python 3.10.r7r8csh|]}t|dqSr r r(fr r"r#r*szwait..)risfuturerrErGtypery ValueErrorrrrrrr:r;r<set_wait)fsr!r~rr"r r#rs rcGs|s|ddSr)r&r`)waiterargsr"r"r#_release_waitersrr c s|dkrt}ntjdtdd|dkr4|IdHS|dkrt||d}|rX|St||dIdHz |Wn.t j k r}zt |W5d}~XYn Xt | }| |t|}tt|}t||d}||zz|IdHWnPt j k rF|r$|YWdS||t||dIdHYnX|r^|W*S||t||dIdHt W5|XdS)Nrr7r8rr )rrr:r;r<r r&r__cancel_and_waitrrk TimeoutError create_future call_laterr functoolspartialrsrhremove_done_callback)futr~r!rvrtimeout_handlecbr"r"r#rsL              rc s|d|dk r"||tt|fdd}|D]}||q@zIdHW5dk rp|D]}||qtXtt}}|D]"}|r| |q| |q||fS)NcsZd8dks4tks4tkrV|sV|dk rVdk rDsVddS)Nrr)rr cancelledrarhr&r`rZcounterrrrr"r#_on_completions z_wait.._on_completion) rrrlenrsrhrrr&add)rr~rr!rrr&Zpendingr"rr#rs(    rc sF|}tt|}||z||IdHW5||XdSr)rrrrrsrrh)rr!rrr"r"r#r&s  r)r!r~c#st|st|r(tdt|jddlm}|ddkrPt nt j dt ddfdd t|Ddfd d }fd d fdd}D]}|qr|dk r҈||ttD] }|VqdS)Nz#expect an iterable of futures, not r)Queuer rr7r8csh|]}t|dqSrrrr r"r#r*Uszas_completed..cs*D]}|dqdSr)r put_nowaitclearr)rr&todor"r# _on_timeoutXs  z!as_completed.._on_timeoutcs4sdS||s0dk r0dSr)removerrhr)r&rrr"r#r^s    z$as_completed.._on_completioncs$IdH}|dkrtj|Sr)rrrr_r)r&r"r# _wait_for_onefsz#as_completed.._wait_for_one)rrrrErGrryZqueuesrrr0r:r;r<rrsrranger)rr!r~rrrr_r")rr&r!rrr#r7s*       rccs dVdSrr"r"r"r"r#__sleep0us rcsr|dkrtIdH|S|dkr*t}ntjdtdd|}||tj ||}z|IdHWS| XdS)Nrrr7r8) rrrr:r;r<rrrZ_set_result_unless_cancelledrh)Zdelayr_r!rxhr"r"r#r s$  r cCst|r6|dkrt}||}|jr2|jd=|St|rb|dk r^|t|k r^t d|St |r|t t ||dStddS)Nr?zRThe future belongs to a different loop than the one specified as the loop argumentr z:An asyncio.Future, a coroutine or an awaitable is required)rrErr0rrDrrr%rruZ isawaitabler _wrap_awaitablerG)Zcoro_or_futurer!r4r"r"r#r s    r ccs|EdHSr) __await__)Z awaitabler"r"r#rsrcs*eZdZddfdd ZddZZS)_GatheringFutureNr cstj|d||_d|_dS)Nr F)rBrC _children_cancel_requested)rSchildrenr!rUr"r#rCsz_GatheringFuture.__init__cCs6|r dSd}|jD]}|rd}q|r2d|_|Srg)r&rrhr)rSZretZchildr"r"r#rhs z_GatheringFuture.cancel)ryrzr{rCrhr}r"r"rUr#rsrF)r!return_exceptionscs|s<|dkrt}ntjdtdd|gSfdd}i}gdd|D]f}||krt||d}|dkrt |}||k rd|_ d 7|||<| |n||} |qdt |dS) Nrr7r8csd7r$|s |dSsd|rFt}|dS|}|dk rd|dSkrg}D]8}|rt}n|}|dkr|}||qtjrĈtn  |dS)Nr) r&rrarrkrbr_appendrr`)rrvZresultsresrZ nfinishedZnfutsouterrr"r#_done_callbacks4    zgather.._done_callbackrr Fr)rr0r:r;r<rr`r rr%rFrsrr)r!rZcoros_or_futuresrZ arg_to_futargrr"rr#r s:  1     r cst|dk rtjdtddt||dr0St}|fddfdd}|S) Nrr7r8r cs\r|s|dS|r.n*|}|dk rJ|n|dSr)rrarhrbr`r_)innerrvrr"r#_inner_done_callbackus  z$shield.._inner_done_callbackcssdSr)r&rr)rrr"r#_outer_done_callbacksz$shield.._outer_done_callback) r:r;r<r r&rr%rrs)rr!rr")rrrr#r Ps     r cs:tstdtjfdd}|S)NzA coroutine object is requiredc slzttdWnNttfk r2Yn6tk rf}zrT|W5d}~XYnXdS)Nr )rZ _chain_futurer rprorqZset_running_or_notify_cancelrb)rvrTrxr!r"r#callbacks z*run_coroutine_threadsafe..callback)rrErG concurrentrFutureZcall_soon_threadsafe)rTr!rr"rr#r s    r cCst|dSr)r,rr4r"r"r#rsrcCs4t|}|dk r(td|d|d|t|<dS)NzCannot enter into task z while another task z is being executed.rrr-r!r4rr"r"r#rs rcCs2t|}||k r(td|d|dt|=dS)Nz Leaving task z! does not match the current task .rrr"r"r#rs rcCst|dSr)r,discardrr"r"r#rsr)rrrrr,r)N)N)N)N)A__all__Zconcurrent.futuresrrNrru itertoolstypesr:weakrefrrrrrrcount__next__rHrrr1r6Z _PyFuturerZ_PyTaskZ_asyncio ImportErrorZ_CTaskrrrrrrrrrr coroutinerr r rrrr r r ZWeakSetr,rrrrrZ_py_register_taskZ_py_unregister_taskZ_py_enter_taskZ_py_leave_taskZ_c_register_taskZ_c_unregister_taskZ _c_enter_taskZ _c_leave_taskr"r"r"r#s                #H,>  x?$