等待关键字如何工作?

时间:2019-01-04 17:43:58

标签: 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

所示

1 个答案:

答案 0 :(得分:1)

await EXPR意味着事件任务计划程序可以在此步骤打开其他功能(例如,从任务队列中拉出已准备好的内容),并且还指示EXPR可以等待。如果EXPR是协程,则意味着它可以包含后续的await,并且当此协程处于非阻塞等待状态(例如IO或网络响应,睡眠)时,同样可以执行其他操作等)