Для заданной ниже подпрограммы (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