python - Python 会在线程模式下使用所有处理器吗?

标签 python django multithreading performance multiprocessing

在开发部署在 Apache mod_wsgi 上的 Django 应用程序时,我发现在多线程(Python 线程;mod_wsgi 进程=1 线程=8)的情况下,Python 不会使用所有可用的处理器。使用多处理方法 (mod_wsgi processes=8 threads=1) 一切都很好,我可以完全加载我的机器。

那么问题来了:这种 Python 行为正常吗?我对此表示怀疑,因为使用 1 个进程和几个线程是默认的 mod_wsgi 方法。

系统是:

FreeBSD 7.2 AMD64 和 Python 2.6.4 上的 2xIntel Xeon 5XXX 系列(8 核(16 核具有超线程))


谢谢大家的回答。 我们都发现这种行为是正常的,因为有 GIL。这是一个很好的解释: http://jessenoller.com/2009/02/01/python-threads-and-the-global-interpreter-lock/ 或 stackoverflow GIL 讨论:What is a global interpreter lock (GIL)? .

最佳答案

Python 会在线程模式下使用所有处理器吗?没有。

Python 不会使用所有可用的处理器;这种 Python 行为正常吗?是的,这是正常的,因为有 GIL。

有关讨论,请参阅 http://mail.python.org/pipermail/python-3000/2007-May/007414.html .

您可能会发现,如果存在某些阻塞,例如等待来自数据库的响应会导致该进程阻塞其他连接,则每个核心/进程有几个(或 4 个)线程仍然可以提高性能。

关于python - Python 会在线程模式下使用所有处理器吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2236321/

相关文章:

python - 如何在二维数组中输入元素

python - django 模板呈现 "<bound method.."而不是上下文变量

python - Django 的 FormWizard 中的空 ModelFormset

python - 有没有办法将我从 .txt 文件中检索到的整数相加

python - 如何在 Python/Windows10 上使用 FFMPEG 和 Pipe 进行屏幕录制?

python - View 中的 Django 选择引用

java - 如何阻止线程接管另一个线程作业?

c++ - 对原子变量的非原子操作

java - 一起使用 Platform.exit() 和 System.exit(int)

python - 在Python中迭代HTML中的 "class"属性?