Как можно определить, какие корутины в данный момент выполняются в цикле событий в Python?

Как можно получить список корутин, которые в данный момент выполняются в цикле событий вашей асинхронной программы на Python? Я понимаю, что по коду все может быть очевидно, но иногда случается так, что некоторые корутины добавляют в цикл событий еще одну-две корутины с помощью команды: <br/> <code class="python">asyncio.create_task(self.bla_bla_bla_he_he_he())</code> <br/> В результате новая корутина может завершиться через определенное время и автоматически удалиться из цикла событий или остаться в нем. Мне нужно знать, как это отследить.
  • 5 октября 2024 г. 12:44
Ответы на вопрос 2
В Python с использованием библиотеки `asyncio` можно получить доступ к текущим задачам (корутинам), выполняющимся в цикле событий, с помощью функции `asyncio.all_tasks()`. Эта функция возвращает множество текущих задач, которые управляются циклом событий. 

Вот пример, как можно получить список всех текущих задач:

```python
import asyncio

async def task1():
    await asyncio.sleep(2)
    print("Task 1 completed")

async def task2():
    await asyncio.sleep(1)
    print("Task 2 completed")

async def main():
    # Создаем задачи
    task1_instance = asyncio.create_task(task1())
    task2_instance = asyncio.create_task(task2())
    
    # Получаем список текущих задач
    current_tasks = asyncio.all_tasks()

    print(f"Current tasks: {[task.get_name() for task in current_tasks]}")

    await asyncio.gather(task1_instance, task2_instance)

# Запускаем основной цикл событий
asyncio.run(main())
```

В этом коде:

1. Мы создали две корутины (`task1` и `task2`), которые просто ждут некоторое время.
2. Внутри функции `main()` мы создаем две задачи.
3. Мы вызываем `asyncio.all_tasks()`, чтобы получить все текущие задачи и вывести их имена. Обратите внимание, что мы используем `task.get_name()`, чтобы получить их имена, но если вы не установили имена задач вручную, они будут иметь автоматические имена вида "Task-X".
4. Затем мы дожидаемся завершения всех задач с помощью `asyncio.gather`.

Это поможет вам увидеть, какие корутины/задачи в данный момент выполняются в вашем цикле событий.
начинаем сначала читать доки https://docs.python.org/3/library/asyncio-task.htm... а не тупо прибегать сюда 

а может и неудалится
а это по какой причине, может лучше устранить причину? Кроме этого есть очень известный Important к create_task https://docs.python.org/3/library/asyncio-task.htm... через это тоже можно узнать состояние. Но на самом деле, такие подобные хотелки говорят про проблемы в архитектуре приложения.
Похожие вопросы