Иногда возникает некоторая некритическая асинхронная операция, которая должна произойти, но я не хочу ждать ее завершения. В реализации coroutine Tornado вы можете "стрелять и забывать" асинхронную функцию, просто опустив ключевое слово yield
.
Я пытался выяснить, как "стрелять и забывать" с помощью нового синтаксиса async
/await
, выпущенного в Python 3.5. Например, упрощенный фрагмент кода:
async def async_foo():
print("Do some stuff asynchronously here...")
def bar():
async_foo() # fire and forget "async_foo()"
bar()
Что происходит, так это то, что bar()
никогда не выполняется, и вместо этого мы получаем предупреждение во время выполнения:
RuntimeWarning: coroutine 'async_foo' was never awaited
async_foo() # fire and forget "async_foo()"