asyncio(python)如何工作?

洛伦佐·兰多菲

协程的产量与任务的产量

如该问题(第二个答案)所述,“ 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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Python的asyncio同步工作

来自分类Dev

Python asyncio:如何模拟__aiter __()方法?

来自分类Dev

python线程如何工作?

来自分类Dev

python变量如何工作?

来自分类Dev

python线程如何工作?

来自分类Dev

如何在Asyncio中检查工作人员状态?

来自分类Dev

如何使用asyncio在python3中运行并行作业?

来自分类Dev

如何使用asyncio和postgres在python中进行交易?

来自分类Dev

使用python-asyncio时如何重载模块?

来自分类Dev

如何在Python中使用aiohttp或asyncio创建并行循环?

来自分类Dev

python asyncio如何读取StdIn和写入StdOut?

来自分类Dev

如何在 asyncio python 中执行函数调用

来自分类Dev

如何使用 asyncio 模块在 python 中解析网站?

来自分类Dev

python Set Comprehensions如何工作?

来自分类Dev

Python:多个参数如何工作?

来自分类Dev

Python的Twisted Reactor如何工作?

来自分类Dev

“ foo(* a)”在Python中如何工作?

来自分类Dev

python变量继承如何工作

来自分类Dev

递归在python中如何工作?

来自分类Dev

Python中的舍入如何工作?

来自分类Dev

Python在Cygwin上如何工作?

来自分类Dev

Python的a,b = b,a如何工作?

来自分类Dev

“ \ b”在Python中如何工作?

来自分类Dev

Python:多个参数如何工作?

来自分类Dev

python多重处理如何工作?

来自分类Dev

“ foo(* a)”在Python中如何工作?

来自分类Dev

Python在Cygwin上如何工作?

来自分类Dev

Python iter()函数如何工作?

来自分类Dev

过滤在Python中如何工作?