应该如何在python中生成线程

时间:2016-02-11 04:15:20

标签: python multithreading cpu-usage processor

我在 python2.7.6 的服务器上运行python程序。我使用了python的threading模块来创建多个线程。我创建了23个线程,所以我很困惑我的所有处理器核心是否真正被使用,有什么办法可以在我的服务器上检查这个。任何建议应该是根据我们拥有的处理器数量产生的理想线程数,以提高我的程序效率。

2 个答案:

答案 0 :(得分:1)

David Beazly在Python中有a great talk on threading。他还就这一主题发表了精彩的演讲here

不幸的是,Python有一种称为GIL的东西,它限制Python一次执行一个线程。要使用所有核心,您必须使用多个流程:See Multiprocessing

Python社区中的某些人不一定将GIL视为挫折,您可以通过除共享内存线程之外的其他方式利用多个核心。

在这里查看great blog post on utilizing multiple cores in Python.

编辑: 以上适用于CPython(Python的最常见和参考实现)。那里有一些"yes but"答案(主要是指不同Python实现上的多线程)但我通常会将人们指向answers like this one来描述CPython中的GIL以及利用多个核心的替代方案{{3 }

答案 1 :(得分:0)

这个问题没有真正的答案,每个人都可能有不同的看法。在使用x个线程测试y场景之后,应确定确定应用程序的线程数以提高性能。性能取决于OS调度程序如何根据CPU负载或正在运行的进程数将线程调度到可用的CPU内核。如果你有4个核心,那么它并不意味着只执行4个线程是好的。实际上你也可以运行23个线程。这就是我们所说的调度程序通过在进程之后调度进程给我们的并行性错觉,从而使我们认为一切都在同时运行。

这是事情

如果您运行1个线程,则可能无法获得足够的性能。当您不断将线程增加到无穷大时,调度程序将花费更多时间来安排线程并妨碍您的整体应用程序性能。