python - await 关键字如何工作?

标签 python python-3.x asynchronous async-await coroutine

对于下面给定的协程(f),

import csv
import urllib

def f(resp):
   print('Line 1')
   yield csv.reader(resp.read().decode('utf-8'))


def h():
    url = 'http://www.nasdaq.com/screening/companies-by-industry.aspx?exchange=NYSE&render=download'    
    resp = urllib.urlopen(url)
    cr = f(resp)

cr = f(resp) 将一个迭代器对象赋值给cr,

cr.next() 执行第 1 行并在 yield 关键字处阻塞。

我的理解是,语法 cr=f(resp) 没有带线程的事件循环(任务调度程序),在幕后


而不是说cr=f(resp)(上面),如果相同的函数(h)有await f(resp)如下所述(await 关键字要求使用 async 语法),

async def h_async():
    url = 'http://www.nasdaq.com/screening/companies-by-industry.aspx?exchange=NYSE&render=download'    
    resp = urllib.urlopen(url)
    await f(resp)

然后,

await f(resp)cr=f(resp) 有何不同?

h_async()h() 有何不同? await 关键字是否在幕后引入带线程的事件循环(任务调度程序),如本示例所示 code

最佳答案

await EXPR 表示事件任务调度程序可以在这一步打开其他东西(例如,从任务队列中拉出准备好的东西),同时也表明 EXPR是可以等待的。如果 EXPR 是一个协程,这意味着它内部可以有后续的 await ,并且当这个协程处于非阻塞等待状态时(比如IO或网络响应、休眠等)

关于python - await 关键字如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54043726/

相关文章:

python - 在 python 中使用 sleep 制作一个计时器。如何考虑计算时间?

Python:正多边形的面积

c# - Parse.com CurrentUser 始终为 null

python - 如何从 python 中的另一个列表中删除索引列表?

python - 在 Ubuntu 服务器上安装软件包时出现内存不足问题

python - 矩阵每行包含特定数字

python - 如何让基于类的装饰器为实例方法工作?

javascript - 缓存异步函数的结果,并将其传递给 Async.js 中的下一个函数

javascript - 依赖于异步调用的 JSON 迭代

javascript - 如何在 node-red 中增加 msg.payload[i]