Код: Выделить всё
import asyncio
import traceback
async def func_c():
print("func c")
traceback.print_stack()
async def func_b():
print("func b")
tasks = [func_c() for _ in range(3)]
await asyncio.gather(*tasks)
async def func_b_v2():
print("func b v2")
tasks = [func_c() for _ in range(3)]
await asyncio.gather(*tasks)
async def func_a():
print("func a")
await func_b()
await func_b_v2()
async def main():
await func_a()
if __name__ == "__main__":
asyncio.run(main())
Обратная трассировка выглядит примерно так:
Код: Выделить всё
File "test.py", line 28, in
asyncio.run(main())
File "asyncio/runners.py", line 190, in run
return runner.run(main)
File "asyncio/runners.py", line 118, in run
return self._loop.run_until_complete(task)
File "asyncio/base_events.py", line 640, in run_until_complete
self.run_forever()
File "asyncio/base_events.py", line 607, in run_forever
self._run_once()
File "asyncio/base_events.py", line 1919, in _run_once
handle._run()
File "asyncio/events.py", line 80, in _run
self._context.run(self._callback, *self._args)
File "test.py", line 6, in func_c
traceback.print_stack()
Я пробовал использовать другие способы одновременного вызова нескольких задач
например,
с помощью asyncio.create_task и цикла for для ожидания этих задач. Это дает аналогичный результат.
Подобные проблемы не помогли:
Обратная трассировка Python для сопрограммы (не использует функцию asyncio.gather)
Подробнее здесь: https://stackoverflow.com/questions/786 ... led-with-a
Мобильная версия