\d!JdgZddlmZddlmZddlmZGddZdS) TaskGroup)events) exceptions)taskscTeZdZdZdZdZdZdZddddZd e d e fd Z d Z d Z dS)ra9Asynchronous context manager for managing groups of tasks. Example use: async with asyncio.TaskGroup() as group: task1 = group.create_task(some_coroutine(...)) task2 = group.create_task(other_coroutine(...)) print("Both tasks have completed now.") All tasks are awaited when the context manager exits. Any exceptions other than `asyncio.CancelledError` raised within a task will cancel all remaining tasks and wait for them to exit. The exceptions are then combined and raised as an `ExceptionGroup`. cd|_d|_d|_d|_d|_d|_t |_g|_d|_ d|_ dS)NF) _entered_exiting _aborting_loop _parent_task_parent_cancel_requestedset_tasks_errors _base_error_on_completed_futselfs #..\python\lib\asyncio\taskgroups.py__init__zTaskGroup.__init__sV    (-%ee  !%ctdg}|jr*|dt|j|jr*|dt|j|jr|dn|jr|dd|}d|dS) Nztasks=zerrors= cancellingentered z )rappendlenrr r join)rinfoinfo_strs r__repr__zTaskGroup.__repr__(st ; 5 KK3T[!1!133 4 4 4 < 7 KK5#dl"3"355 6 6 6 > # KK % % % % ] # KK " " "88D>>'H''''rcK|jrtd|dd|_|jtj|_t j|j|_|jtd|d|S)N TaskGroup z has been already enteredTz! cannot determine the parent task)r RuntimeErrorr rget_running_loopr current_taskr rs r __aenter__zTaskGroup.__aenter__6s = @>T>>>@@ @ : 022DJ!.tz::   $FTFFFHH H rcKd|_|#||r|j||_|tjur|nd}|jr|jdkrd}||js| |j r{|j |j |_ |j d{Vn9#tj$r'}|js|}| Yd}~nd}~wwxYwd|_ |j {|j rJ|j|j|r |js||(|tjur|j||jr% t!d|j}|d#d|_wxYwdS)NTzunhandled errors in a TaskGroup)r _is_base_errorrrCancelledErrorrr uncancelr _abortrrr create_futurerrBaseExceptionGroup)retexctbpropagate_cancellation_errorexmes r __aexit__zTaskGroup.__aexit__Fs O##C((  ("D 222CC %  ( 4 ))++q0004, >>  k *%-)-)A)A)C)C& ",,,,,,,,,, " " "~ "460KKMMM "&*D "'k **;   '" " ( /  /. . >b (AAA L   $ $ $ < $ $'(I4<XXd"# #### $ $s$1 B??C5C00C5E22 E;N)namecontextc|jstd|d|jr|jstd|d|jrtd|d||j|}n|j||}tj||| |j |j ||S)zbCreate a new task in this group and return it. Similar to `asyncio.create_task`. r&z has not been enteredz is finishedz is shutting downN)r;) r r'r rr r create_taskr_set_task_nameadd_done_callback _on_task_doneadd)rcoror:r;tasks rr=zTaskGroup.create_tasks } KIDIIIJJ J = B B@D@@@AA A > GEDEEEFF F ?:))$//DD:))$)@@D T4((( t1222  rr4returncht|tsJt|ttfS)N) isinstance BaseException SystemExitKeyboardInterrupt)rr4s rr-zTaskGroup._is_base_errors.#}-----# ,=>???rcxd|_|jD]*}|s|+dS)NT)r rdonecancel)rts rr0zTaskGroup._abortsB  A6688    rc|j||j:|js3|js|jd|rdS|}|dS|j|| |r|j ||_ |j r,|j d|d|j d||ddS|js=|js8|d|_|j dSdSdS)NTzTask z% has errored out but its parent task z is already completed)message exceptionrC)rdiscardrrK set_result cancelledrPrrr-rr r call_exception_handlerr rr0rL)rrCr4s rr@zTaskGroup._on_task_dones D!!!  ! -dk -)..00 8&11$777 >>    Fnn ; F C     s # # #(8(@"D    ! ! # #  J - -L4LL#'#4LLL  //    F~ 'd&C '& KKMMM,0D )   $ $ & & & & &+ ' ' ' 'r)__name__ __module__ __qualname____doc__rr$r*r9r=rGboolr-r0r@rrrr s & & & ( ( ( O$O$O$b)-d0@-@D@@@@2'2'2'2'2'rN)__all__rrrrrrZrrr\s -`'`'`'`'`'`'`'`'`'`'r