python是并发编程的一个重要选择

Ben*_*ald 4 python multithreading

刚考虑开始学习python,但在投入更多时间之前我有一个问题.让我说这是一个声明,然后关注其他人发表评论,因为声明中的假设可能是无效的:

我已经阅读了关于GIL的内容,如果您需要在python中使用并发解决方案,那么您最好的选择就是分叉一个新进程以避免GIL.

我担心的是,如果我遇到问题,我想在N个处理器之间分成N*2个部分(假设我有一个服务器运行*nix o/s,比如8个核心)我会招致上下文切换惩罚进程之间而不是线程之间,这是更昂贵的,这将限制性能.

我问这个是因为其他语言声称在这种情况下表现出色,我想知道python是否适合这个领域.

Ign*_*ams 12

multiprocessing 可以绕过GIL,但它引入了自己的问题,例如进程之间的通信.


And*_*Dog 7

Python对于CPU绑定的并发编程不是很好.GIL将(在许多情况下)使您的程序运行,就好像它运行在单个核心上 - 甚至更糟.即使是Unladen Swallow也可能(可能)无法解决这个问题(引用他们的项目计划:"我们不再对我们完全消除GIL的机会持乐观态度").

正如您已经说过的,其他语言声称在并发编程方面更好.例如,Haskell具有用于编程并发应用程序的内置功能.您也可以尝试使用OpenMP的C++,我认为这使得并行化变得非常简单.

如果您的应用程序是I/O绑定的,那么Python可能是一个严肃的解决方案,因为GIL通常在执行阻塞调用时被释放.