【发布时间】:2015-05-20 06:26:13
【问题描述】:
Yield from coroutine vs yield from task
正如这个问题(第二个答案)中所报告的那样,“yield from coroutine()”就像调用一个函数。我不明白像 yield from 这样的东西,实际上是等到协程完成才应该启用并发和非阻塞操作。
例如,在 Golang 中,您只需使用 go 关键字进行推理。
当你做类似的事情时:
func function1(){
go function2()
... Some channel communication here
}
理想情况下,两个任务并行启动,并且可以使用通道同时通信。
这些任务可以很容易地并行(增加 procs 的数量),并且背后的逻辑对我来说更简单。
请有人帮助我理解这些东西。
【问题讨论】:
-
'yield from' 提供了一个点,此时 asyncio 可以在任务之间主动跳转,这样阻塞操作就不会妨碍其他任务的运行。实际的并行性需要使用 concurrent.futures 模块中的 ThreadPoolExecutor 或 ProcessPoolExecutor,它们可以使用 run_in_executor() 方法在 asyncio 中运行。
标签: python concurrency parallel-processing python-asyncio