Mam kod blokujący, non-asynchroniczny tak:Lazy iteratory (generatory) z asyncio
def f():
def inner():
while True:
yield read()
return inner()
Z tym kodem dzwoniący może wybrać, kiedy zatrzymać funkcję generowania danych. Jak zmienić to na asynchroniczne? To rozwiązanie nie działa:
async def f():
async def inner():
while True:
yield await coroutine_read()
return inner()
yield
... bo nie może być stosowany w async def
funkcji. Jeśli usuniemy async
z podpisu inner()
, nie będę już mógł używać await
.
Nie potrzebujesz 'yield read()', gdy używasz asyncio, ponieważ 'await' zrobi dokładnie to za kulisami. To oczywiście nie odpowiada na pytanie. –
PEP-0492 [nie obejmuje] (https://www.python.org/dev/peps/pep-0492/#coroutine-generators) generatorów koroutynowych (czego się chce), więc od czasu PEP został zaimplementowany tylko w 3.5, myślę, że odpowiedź brzmi "nie ma sposobu, aby to zrobić". –
Próba wdrożenia sposobu uzyskiwania wewnętrznych funkcji asynchronicznych: http://stackoverflow.com/a/37572657/1113207 –