如该问题(第二个答案)所述,“ yield from coroutine()
”就像调用一个函数。我不明白诸如yield from之类的东西实际上要等到协程完成后才能启用并发和非阻塞操作。
例如,在Golang中,您只需通过go关键字进行推理。
当您执行以下操作时:
func function1(){
go function2()
... Some channel communication here
}
发生的情况是理想情况下,第2个任务并行开始,并且可以使用通道并发通信。
可以轻松地使这些任务并行化(增加proc的数量),而对我而言,其背后的逻辑更为直接。
请有人帮助我,以了解这些东西。
我认为(公平地说,我不是python的专家)答案是协程本身并不能真正为您带来神奇的并行性。协程是一种说“在此任务上工作直到……然后停顿”的方式。暂停后,流控制可以继续进行其他操作,直到您决定再次启动它为止。
如果协程最终启动了可以异步完成的事情,那么您可以同时使多件事情同时工作-例如,如果您可以在协程中启动一个线程,并且该线程正在处理某个事情,而该事情恰好释放了GIL(即IO)。然后,您可以在协同例程中启动线程,然后暂停委派给其他任务的执行。当您完成了其他任务后,希望您的IO能够完成,并且您可以继续前进,而不必完全等待IO。我相信这就是asyncio正在为您做的事情。
请注意,如果您想很好地阅读协同例程,那么值得参考一下此演示文稿(并发性从第75张幻灯片开始)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句