async def runner(): async with taskgroups.TaskGroup(): async with taskgroups.TaskGroup() as g2: for _ in range(5): g2.create_task(foo()) await asyncio.sleep(10)
async def runner(): async with taskgroups.TaskGroup(): async with taskgroups.TaskGroup() as g2: for _ in range(5): g2.create_task(foo()) try: await asyncio.sleep(10) except asyncio.CancelledError: raise
async def runner(): nonlocal t1, t2 async with taskgroups.TaskGroup() as g: t1 = g.create_task(foo1()) t2 = g.create_task(foo2()) await asyncio.sleep(0.1) 1 / 0
async def test_taskgroup_task_name(self): async def coro(): await asyncio.sleep(0) async with taskgroups.TaskGroup() as g: t = g.create_task(coro(), name="yolo") self.assertEqual(t.get_name(), "yolo")
async def nested_runner(): async with taskgroups.TaskGroup() as g1: g1.create_task(crash_soon()) try: await asyncio.sleep(10) except asyncio.CancelledError: await asyncio.sleep(0.5) raise
async def runner(): nonlocal NUM async with taskgroups.TaskGroup(): try: await asyncio.sleep(10) except asyncio.CancelledError: NUM += 10 raise
async def runner(): nonlocal NUM, t2 async with taskgroups.TaskGroup() as g: g.create_task(foo1()) t2 = g.create_task(foo2()) NUM += 10
async def main(): task = asyncio.current_task() try: async with taskgroups.TaskGroup() as tg: async with database(): tg.create_task(raise_exc()) await asyncio.sleep(1) except* CustomException as err: self.assertEqual(task.cancelling(), 0) self.assertEqual(len(err.exceptions), 2)
async def runner(): nonlocal NUM async with taskgroups.TaskGroup(): try: await asyncio.sleep(10) except asyncio.CancelledError: NUM += 10 # This isn't a good idea, but we have to support # this weird case. raise MyExc
async def runner(): nonlocal NUM async with taskgroups.TaskGroup() as g: for _ in range(5): g.create_task(foo()) try: await asyncio.sleep(10) except asyncio.CancelledError: NUM += 10 raise
async def test_taskgroup_23(self): async def do_job(delay): await asyncio.sleep(delay) async with taskgroups.TaskGroup() as g: for count in range(10): await asyncio.sleep(0.1) g.create_task(do_job(0.3)) if count == 5: self.assertLess(len(g._tasks), 5) await asyncio.sleep(1.35) self.assertEqual(len(g._tasks), 0)
async def runner(): nonlocal NUM, runner_cancel async with taskgroups.TaskGroup() as g: g.create_task(foo1()) g.create_task(foo1()) g.create_task(foo1()) g.create_task(foo2()) try: await asyncio.sleep(10) except asyncio.CancelledError: runner_cancel = True raise NUM += 10
async def test_taskgroup_01(self): async def foo1(): await asyncio.sleep(0.1) return 42 async def foo2(): await asyncio.sleep(0.2) return 11 async with taskgroups.TaskGroup() as g: t1 = g.create_task(foo1()) t2 = g.create_task(foo2()) self.assertEqual(t1.result(), 42) self.assertEqual(t2.result(), 11)
async def test_taskgroup_task_context(self): cvar = contextvars.ContextVar('cvar') async def coro(val): await asyncio.sleep(0) cvar.set(val) async with taskgroups.TaskGroup() as g: ctx = contextvars.copy_context() self.assertIsNone(ctx.get(cvar)) t1 = g.create_task(coro(1), context=ctx) await t1 self.assertEqual(1, ctx.get(cvar)) t2 = g.create_task(coro(2), context=ctx) await t2 self.assertEqual(2, ctx.get(cvar))
async def test_taskgroup_03(self): async def foo1(): await asyncio.sleep(1) return 42 async def foo2(): await asyncio.sleep(0.2) return 11 async with taskgroups.TaskGroup() as g: t1 = g.create_task(foo1()) await asyncio.sleep(0.15) # cancel t1 explicitly, i.e. everything should continue # working as expected. t1.cancel() t2 = g.create_task(foo2()) self.assertTrue(t1.cancelled()) self.assertEqual(t2.result(), 11)
async def test_taskgroup_no_create_task_after_failure(self): async def coro1(): await asyncio.sleep(0.001) 1 / 0 async def coro2(g): try: await asyncio.sleep(1) except asyncio.CancelledError: with self.assertRaises(RuntimeError): g.create_task(c1 := coro1()) # We still have to await c1 to avoid a warning with self.assertRaises(ZeroDivisionError): await c1 with self.assertRaises(ExceptionGroup) as cm: async with taskgroups.TaskGroup() as g: g.create_task(coro1()) g.create_task(coro2(g)) self.assertEqual(get_error_types(cm.exception), {ZeroDivisionError})
async def runner(): async with taskgroups.TaskGroup() as g1: g1.create_task(crash_after(10)) async with taskgroups.TaskGroup() as g2: g2.create_task(crash_after(0.1))
async def runner(): async with taskgroups.TaskGroup() as g: g.create_task(root(g))
async def runner(): async with taskgroups.TaskGroup() as g: g.create_task(crash_soon()) await nested()
async def runner(): async with taskgroups.TaskGroup() as g: g.create_task(foo1()) g.create_task(foo2())
async def runner(): async with taskgroups.TaskGroup() as g: for _ in range(5): g.create_task(foo())
async def runner(): async with taskgroups.TaskGroup() as g: g.create_task(hydra(g)) g.create_task(hercules())
async def runner(): async with taskgroups.TaskGroup(name='g1') as g1: g1.create_task(crash_after(0.1)) async with taskgroups.TaskGroup(name='g2') as g2: g2.create_task(crash_after(0.2))