Beispiel #1
0
        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)
Beispiel #2
0
        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
Beispiel #3
0
 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
Beispiel #4
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")
Beispiel #5
0
 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
Beispiel #6
0
 async def runner():
     nonlocal NUM
     async with taskgroups.TaskGroup():
         try:
             await asyncio.sleep(10)
         except asyncio.CancelledError:
             NUM += 10
             raise
Beispiel #7
0
        async def runner():
            nonlocal NUM, t2

            async with taskgroups.TaskGroup() as g:
                g.create_task(foo1())
                t2 = g.create_task(foo2())

            NUM += 10
Beispiel #8
0
 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)
Beispiel #9
0
 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
Beispiel #10
0
        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
Beispiel #11
0
    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)
Beispiel #12
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
Beispiel #13
0
    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)
Beispiel #14
0
    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))
Beispiel #15
0
    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)
Beispiel #16
0
    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})
Beispiel #17
0
        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))
Beispiel #18
0
 async def runner():
     async with taskgroups.TaskGroup() as g:
         g.create_task(root(g))
Beispiel #19
0
 async def runner():
     async with taskgroups.TaskGroup() as g:
         g.create_task(crash_soon())
         await nested()
Beispiel #20
0
 async def runner():
     async with taskgroups.TaskGroup() as g:
         g.create_task(foo1())
         g.create_task(foo2())
Beispiel #21
0
 async def runner():
     async with taskgroups.TaskGroup() as g:
         for _ in range(5):
             g.create_task(foo())
Beispiel #22
0
 async def runner():
     async with taskgroups.TaskGroup() as g:
         g.create_task(hydra(g))
         g.create_task(hercules())
Beispiel #23
0
        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))