这是来自https://github.com/ronf/asyncssh/blob/master/examples/math_server.py#L38
的代码块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: %s\n' % line)
except asyncssh.BreakReceived:
pass
在async
之前有一个def
关键字,但是在for
循环之前也有一个关键字。在此处查看有关异步的文档:https://docs.python.org/3/library/asyncio-task.html时,我没有看到此async
关键字的任何类似用法。
那么,关键字在这种情况下会做什么?
答案 0 :(得分:1)
async for ... in ...
构造允许您遍历“异步可迭代”,并且如注释中所述,详细说明在PEP 492
在您的示例情况下,async for
循环等待标准输入,而不会阻止其他异步循环任务。
如果您使用for
循环,则将阻塞操作,并且在您输入内容的单元中,循环中的其他任务将无法执行。
再举一个例子,假设MySQL客户端从数据库中获取了x行。 aio-mysql example
async for row in conn.execute("SELECT * FROM table;"):
print(row)
这将获取单行,并且在等待IO操作(mysql查询)时不会阻塞asyncio循环上其他任务的执行。
然后您对获取的行数据进行处理。