Python asyncio.create_task() – действительно нужно сохранить ссылку?Python

Программы на Python
Ответить
Anonymous
 Python asyncio.create_task() – действительно нужно сохранить ссылку?

Сообщение Anonymous »

В документации asyncio.create_task() содержится следующее предупреждение:

Важно! Сохраните ссылку. к результату этой функции, чтобы избежать исчезновения задачи в середине выполнения. (источник)

Мой вопрос: действительно ли это правда?
У меня есть несколько операций ввода-вывода, связанных «огонь и забыть", которые я хочу запускать одновременно с помощью 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]
Ответить

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

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

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

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

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