【发布时间】:2020-04-20 18:02:25
【问题描述】:
在"I'm not feeling the async pressure"Armin Ronacher 的文章中提出以下观察:
在线程代码中,任何函数都可以产生。在异步代码中,只有异步函数可以。这意味着例如 writer.write 方法不能阻塞。
此观察是参考以下代码示例进行的:
from asyncio import start_server, run
async def on_client_connected(reader, writer):
while True:
data = await reader.readline()
if not data:
break
writer.write(data)
async def server():
srv = await start_server(on_client_connected, '127.0.0.1', 8888)
async with srv:
await srv.serve_forever()
run(server())
我不明白这个评论。具体来说:
- 为什么同步函数在异步函数内部时不能
yield? -
yield与阻塞执行有什么关系?为什么不能yield的函数不能阻塞?
【问题讨论】:
-
你了解那篇文章中的“产量”是什么意思吗?
-
也许不是。他是不是在
yield关键字的意义上使用“yield”这个词,例如生成器迭代器? -
不。这意味着让其他代码运行。
-
@RobertHarvey 也许你可以写一个简短的答案指出yield的含义,这样问题就解决了?
-
@user4815162342 根据 Harvey 的有用评论和一些扩展的思考/阅读,我自己写了一个扩展的答案。希望听起来是正确的。
标签: python asynchronous python-asyncio yield