asyncio.create_task(корутина)
для запуска корутины в качестве задачи (Task) в текущем цикле событий. Функция возвращает объект Task
, который представляет выполняющуюся корутину. Например:
import asyncio
async def my_coroutine():
await asyncio.sleep(1)
print("Задача выполнена!")
async def main():
task = asyncio.create_task(my_coroutine())
await asyncio.sleep(0.5) # Даем задаче время запуститься
print("Главная функция продолжает работу.")
await task # Дожидаемся завершения задачи
asyncio.run(main())
Важно: если вы не будете дожидаться завершения задачи (например, с помощью await task
), то корутина может быть прервана при завершении цикла событий.
asyncio.create_task()
- это функция в Python, предоставляемая модулем asyncio
, которая позволяет запланировать выполнение сопрограммы (coroutine) в качестве задачи (Task) в event loop'е (цикле событий). Это основной способ запустить асинхронную операцию конкурентно с остальным кодом. Вот как это использовать:
Основной принцип:
async
.asyncio.create_task(coroutine)
, передав сопрограмму в качестве аргумента. Эта функция возвращает объект Task
.Task
представляет собой запланированную для выполнения сопрограмму. Он будет выполнен в фоновом режиме event loop'ом.await task
. Если не использовать await
, ваша основная программа может завершиться до того, как задача будет завершена.Пример:
import asyncio
async def my_coroutine(name):
print(f"Задача {name} запущена")
await asyncio.sleep(1) # Имитация асинхронной операции
print(f"Задача {name} завершена")
return f"Результат задачи {name}"
async def main():
# Создание задач
task1 = asyncio.create_task(my_coroutine("1"))
task2 = asyncio.create_task(my_coroutine("2"))
# Ожидание завершения задач
result1 = await task1
result2 = await task2
print(f"Результат задачи 1: {result1}")
print(f"Результат задачи 2: {result2}")
if __name__ == "__main__":
asyncio.run(main())
Пояснения к примеру:
my_coroutine(name)
: Асинхронная функция, которая печатает сообщения о начале и конце работы и имитирует асинхронную операцию с помощью asyncio.sleep()
.asyncio.create_task(my_coroutine("1"))
и asyncio.create_task(my_coroutine("2"))
: Создают два объекта Task
, которые запланированы для выполнения параллельно.await task1
и await task2
: Гарантируют, что основная функция main()
дождется завершения каждой задачи, прежде чем продолжить выполнение. await
приостанавливает выполнение main()
до тех пор, пока задача не будет завершена, после чего возвращает результат работы сопрограммы (в данном случае, строка).asyncio.run(main())
: Запускает event loop и выполняет асинхронную функцию main()
. Это основной способ запуска асинхронного кода.Важные моменты:
await
задачи, если вам важен результат ее работы или необходимо дождаться ее завершения.asyncio.create_task()
возвращает объект Task
, который можно использовать для отмены задачи (task.cancel()
) или для проверки ее статуса (task.done()
, task.cancelled()
, task.exception()
).time.sleep()
(синхронная функция сна) блокирует event loop и препятствует параллельному выполнению задач. Используйте asyncio.sleep()
вместо этого.