Есть ли способ вызвать curio.spawn из asyncio.run

Есть отличная библиотека, которую я хочу использовать из более крупного проекта, над которым я работаю, который использует «стандартный asyncio». Некоторые функции библиотечных вызовов curio.spawnчто приводит к ошибке при вызове из "стандартного asyncio". Есть ли способ заставить это работать?

Пример кода, воспроизводящего ошибку:

      import curio
import asyncio

async def curio_method():
    await curio.sleep(1)

async def asyncio_method():
    task = await curio.spawn(curio_method())
    await task

asyncio.run(asyncio_method())

Результат:

      Traceback (most recent call last):
File "/tmp/curio_test.py", line 12, in <module>
    asyncio.run(asyncio_method())
File "/usr/lib/python3.9/asyncio/runners.py", line 44, in run
    return loop.run_until_complete(main)
File "/usr/lib/python3.9/asyncio/base_events.py", line 642, in run_until_complete
    return future.result()
File "/tmp/curio_test.py", line 8, in asyncio_method
    task = await curio.spawn(curio_method())
File "/home/garyvdm/dev/image_builder/bpmagent/ve/lib/python3.9/site-packages/curio/task.py", line 613, in spawn
    task = await _spawn(coro)
File "/home/garyvdm/dev/image_builder/bpmagent/ve/lib/python3.9/site-packages/curio/traps.py", line 83, in _spawn
    return await _kernel_trap('trap_spawn', coro)
File "/home/garyvdm/dev/image_builder/bpmagent/ve/lib/python3.9/site-packages/curio/traps.py", line 32, in _kernel_trap
    result = yield request
RuntimeError: Task got bad yield: ('trap_spawn', <coroutine object curio_method at 0x7fc1b62eeec0>)
sys:1: RuntimeWarning: coroutine 'curio_method' was never awaited

1 ответ

Вместо , вы можете использовать .

Но, если вам нужно использовать , вы можете поставить свойcurio.runвнутри твоегоasyncio.runлогика. Во всяком случае, я думаю, что это не идея.

Другие вопросы по тегам