@wows15
В автоматизации сила, брат

Почему возникает: RuntimeError: Task got Future attached to a different loop?

Мой код:
import asyncio


async def coro(arg):
    return arg


async def main():
    loop = asyncio.new_event_loop()
    # asyncio.set_event_loop(loop) - пробовал, не помогает

    task = asyncio.ensure_future(coro(1), loop=loop)

    res = await asyncio.gather(*asyncio.all_tasks(loop=loop))


if __name__ == '__main__':
    event_loop = asyncio.get_event_loop()
    event_loop.run_until_complete(main())


Ошибка:
Traceback (most recent call last):
  File "/Users/lifr0m/Documents/Proxies/test.py", line 18, in <module>
    event_loop.run_until_complete(main())
  File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/asyncio/base_events.py", line 642, in run_until_complete
    return future.result()
  File "/Users/lifr0m/Documents/Proxies/test.py", line 13, in main
    res = await asyncio.gather(*asyncio.all_tasks(loop=loop))
RuntimeError: Task <Task pending name='Task-1' coro=<main() running at /Users/lifr0m/Documents/Proxies/test.py:13> cb=[_run_until_complete_cb() at /Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/asyncio/base_events.py:184]> got Future <_GatheringFuture pending> attached to a different loop


Собственно, что я делаю не так? Я разве не могу запустить таск от одного лупа и в нём создать второй луп? Я в аргументах указал второй луп.
  • Вопрос задан
  • 4671 просмотр
Решения вопроса 1
shurshur
@shurshur
Сисадмин, просто сисадмин...
А для чего вообще так делать?

Естественно один event_loop не может ждать таски другого event_loop. Ведь суть asyncio в том, что в одном потоке выполняется event loop и на ожиданиях ввода-вывода происходит переключение между задачами. Если работает один event loop, то другой в это время не может выполняться.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы