以下是代码块的块:
async def handle_client(process):
process.stdout.write('Enter numbers one per line, or EOF when done:n')
total = 0
try:
async for line in process.stdin:
line = line.rstrip('n')
if line:
try:
total += int(line)
except ValueError:
process.stderr.write('Invalid number: %sn' % line)
except asyncssh.BreakReceived:
pass
在def
之前有一个async
关键字,但是for
循环之前也有一个关键字。在此处查看Asyncio的文档时:https://docs.python.org/3/library/asyncio-task.html,我看不到此async
关键字的任何类似用途。
那么,关键字在此上下文中有什么作用?
async for ... in ...
构造允许您循环循环"异步峰",如评论中所述,详细说明在PEP 492
在您的示例情况下,async for
循环等待STDIN输入,同时不阻止其他异步环任务。如果您要使用for
循环,这将是阻止操作,并且您输入输入的循环中没有其他任务。
获得另一个示例,请想象MySQL客户端从数据库中获取X行。AIO-MYSQL示例
async for row in conn.execute("SELECT * FROM table;"):
print(row)
这将获取单行,并且在等待IO操作(MySQL查询)时,它并没有阻止异步环上其他任务的执行。
然后,您可以使用所获得的行数据进行操作。