Важно! Сохраните ссылку. к результату этой функции, чтобы избежать исчезновения задачи в середине выполнения. (источник)
Мой вопрос: действительно ли это правда?
У меня есть несколько операций ввода-вывода, связанных «огонь и забыть", которые я хочу запускать одновременно с помощью asyncio, отправляя их в цикл событий с помощью asyncio.create_task(). Однако меня не особо волнует возвращаемое значение сопрограммы или даже ее успешное выполнение, а только то, что они запускаются в конечном итоге. Одним из вариантов использования является запись данных из «дорогого» расчета обратно в базу данных Redis. Если Redis доступен, отлично. Если нет, ну да ладно, не беда. Вот почему я не хочу/нужно ждать этих задач.
Вот общий пример:
Код: Выделить всё
import asyncio
async def fire_and_forget_coro():
"""Some random coroutine waiting for IO to complete."""
print('in fire_and_forget_coro()')
await asyncio.sleep(1.0)
print('fire_and_forget_coro() done')
async def async_main():
"""Main entry point of asyncio application."""
print('in async_main()')
n = 3
for _ in range(n):
# create_task() does not block, returns immediately.
# Note: We do NOT save a reference to the submitted task here!
asyncio.create_task(fire_and_forget_coro(), name='fire_and_forget_coro')
print('awaiting sleep in async_main()')
await asyncio.sleep(2.0) #
Подробнее здесь: [url]https://stackoverflow.com/questions/71938799/python-asyncio-create-task-really-need-to-keep-a-reference[/url]
Мобильная версия