We have walked through the most popular forms of concurrency. But the question remains - when should choose which one? It really depends on the use cases. From my experience (and reading), I tend to follow this pseudo code:
if io_bound:
if io_very_slow:
print("Use Asyncio")
else:
print("Use Threads")
else:
print("Multi Processing")
CPU Bound => Multi Processing
I/O Bound, Fast I/O, Limited Number of Connections => Multi Threading
它们用于(稍微)不同的目的和/或要求。CPython(一个典型的主线Python实现)仍然具有global interpreter lock,因此多线程应用程序(现在实现并行处理的标准方法)是次优的。这就是为什么>更受欢迎。但并不是每个问题都可以有效地分成[几乎独立的]部分,所以可能需要大量的进程间通信。这就是为什么
multiprocessing
可能比^{multiprocessing
通常不比threading
更受欢迎的原因。asyncio
(这种技术不仅在Python中可用,其他语言和/或框架也有它,例如Boost.ASIO)是一种有效处理来自多个同时源的大量I/O操作的方法,而不需要并行代码执行。所以这只是一个解决办法(确实是个好办法!)对于特定的任务,而不是一般的并行处理。[快速回答]
TL;博士
做出正确的选择:
Reference
[注意:
asyncio
事件循环(uvloop使asyncio
2-4x更快)。【更新(2019年)】:
这是基本思想:
所以基本上要坚持线程化,除非有IO/CPU问题。
相关问题 更多 >
编程相关推荐