¿Cómo funciona la palabra clave await?

Para una co-rutina a continuación dada ( 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) asigna un objeto iterador a cr ,

cr.next() ejecuta la línea 1 y bloquea en la palabra clave de rendimiento.

Mi entendimiento es que, con la syntax cr=f(resp) no hay un bucle de eventos (progtwigdor de tareas) con subprocesos, detrás de la escena


En lugar de decir cr=f(resp) (arriba), si la misma función ( h ) tiene a la await f(resp) como se menciona a continuación (la palabra clave en await solicita syntax 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) 

entonces,

¿Cómo await f(resp) diferente de cr=f(resp) ?

¿ h_async() qué se diferencia h_async() de h() ? ¿ await palabra clave introduzca un bucle de eventos (progtwigdor de tareas) con subprocesos, detrás de la escena, como se muestra en este código de ejemplo?

await EXPR significa que el progtwigdor de tareas de eventos puede encender otra cosa en este paso (por ejemplo, extraer algo que está listo de la cola de tareas), y también indica que EXPR es esperable. Si EXPR es una rutina, significa que puede tener una await posterior en el interior, y otra vez también se puede ejecutar otra cosa cuando esta computadora está en estado de espera sin locking (como IO o respuesta de red, suspensión, etc.)