【发布时间】:2017-07-26 04:42:41
【问题描述】:
我对 Javascript 中的 Promise 有一点经验。我对 Python 非常有经验,但对它的协程很陌生,而且有一点我无法理解:异步性在哪里起作用?
让我们考虑以下最小示例:
async def gen():
await something
return 42
据我了解,await something 将我们函数的执行放在一边,让主程序运行其他位。在某个时候something 有一个新结果,gen 很快就会有一个结果。
如果 gen 和 something 是协程,那么从所有互联网智慧来看,它们都是生成器。知道生成器何时有可用的新项目 afaik 的唯一方法是轮询它:x=gen(); next(x)。但这是阻塞!当x 有结果时,调度程序如何“知道”?答案不能是“当something 有结果时”,因为something 也必须是一个生成器(因为它是一个协程)。而且这个论点是递归应用的。
我无法摆脱这样的想法,即在某些时候该过程只需要同步等待。
【问题讨论】:
标签: python asynchronous async-await