在开发部署在 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/