【发布时间】:2016-09-13 18:58:47
【问题描述】:
我有一个像这样的阻塞、非异步代码:
def f():
def inner():
while True:
yield read()
return inner()
使用此代码,调用者可以选择何时停止函数以生成数据。如何将其更改为异步?此解决方案不起作用:
async def f():
async def inner():
while True:
yield await coroutine_read()
return inner()
... 因为yield 不能在async def 函数中使用。如果我从inner() 签名中删除async,我就不能再使用await。
【问题讨论】:
-
使用 asyncio 时不需要
yield read(),因为await将在幕后完成此操作。这当然不能回答问题。 -
PEP-0492 doesn't cover coroutine-generators (这是你想要的),所以,由于 PEP 只在 3.5 中实现,我猜答案是“没有办法做到这一点”。
-
尝试实现在异步函数内部产生的方法:stackoverflow.com/a/37572657/1113207
标签: python asynchronous python-asyncio