Есть ли способ получить обратную трассировку асинхронной функции, которая была вызвана с помощью asyncio.gather, и посмоPython

Программы на Python
Ответить
Anonymous
 Есть ли способ получить обратную трассировку асинхронной функции, которая была вызвана с помощью asyncio.gather, и посмо

Сообщение Anonymous »

Проблему можно резюмировать в этом примере:

Код: Выделить всё

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())
Проблема заключается в том, что трассировка.print_stack() дает идентичные результаты, если она была вызвана функцией func_b или func_b_v2 в их вызове await asyncio.gather.
Обратная трассировка выглядит примерно так:

Код: Выделить всё

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()
Передача обратной трассировки от функции к функции вручную не идеальна, поскольку func_c в моей базе кода эффективно используется для регистрации результата, но затем можно отслеживать обратную трассировку этого результата.
Я пробовал использовать другие способы одновременного вызова нескольких задач
например,
с помощью asyncio.create_task и цикла for для ожидания этих задач. Это дает аналогичный результат.
Подобные проблемы не помогли:
Обратная трассировка Python для сопрограммы (не использует функцию asyncio.gather)

Подробнее здесь: https://stackoverflow.com/questions/786 ... led-with-a
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»