Я хочу использовать выход генератора и асинхронные функции. Я прочитал this topic и написал следующий код:Как использовать 'yield' внутри функции async?
import asyncio
async def createGenerator():
mylist = range(3)
for i in mylist:
await asyncio.sleep(1)
yield i*i
async def start():
mygenerator = await createGenerator()
for i in mygenerator:
print(i)
loop = asyncio.get_event_loop()
try:
loop.run_until_complete(start())
except KeyboardInterrupt:
loop.stop()
pass
Но я получил ошибку:
SyntaxError: «выход» внутри функции асинхронной
Как использовать генератор выход в функции асинхронной?
Возможно ли это? Это похоже на два противоположных проекта. Генераторы не производят значения, если это необходимо, это означает, что в принципе они должны обрабатывать состояние *. С другой стороны, 'async' предполагает, что вызываемая функция не может зависеть от этого состояния. В противном случае у вас будут гонки данных. Кажется очень громоздким поддерживать асинхронные генераторы, их нужно будет обернуть механизмами блокировки. Поэтому, вероятно, ответ на ваш вопрос находится где-то в этом направлении. – luk32
можете ли вы вернуть объект Future, а затем предоставить этот объект, когда захотите его. Я никогда не использовал асинчо, но так оно и было с Торнадо. – reticentroot
Я не думаю, что генератор асинхронов имеет смысл. Вы должны иметь возможность вернуть генератор из функции async. Есть ли что-то, чего вы хотите достичь, или вы просто пытаетесь разобраться? – syntonym