我必须在与部门其他人共享的计算服务器上定期运行作业,当我开始 10 个作业时,我真的希望它只占用 10 个内核而不是更多;我不在乎每次运行单个内核是否需要更长的时间:我只是不希望它侵占其他人的领域,这将需要我放弃工作等等。我只想拥有 10 个实心核心,仅此而已。
我在 Redhat 上使用 Enthought 7.3-1,它基于 Python 2.7.3 和 numpy 1.6.1,但问题更笼统。
最佳答案
只希望这可以修复您可能使用的所有场景和系统。
- 使用
numpy.__config__.show()
查看您使用的是 OpenBLAS 还是 MKL
从现在开始,您可以通过几种方法来做到这一点。
2.1。终端路线 export OPENBLAS_NUM_THREADS=1
或 export MKL_NUM_THREADS=1
2.2(这是我的首选方式)在您的 python 脚本 import os
并添加行 os.environ['OPENBLAS_NUM_THREADS'] = '1'
或 os.environ['MKL_NUM_THREADS'] = '1'
.
注意在设置os.environ[VAR]
时线程数必须是字符串!此外,您可能需要在导入 numpy/scipy 之前设置此环境变量。
除了 openBLAS 或 MKL 之外,可能还有其他选项,但第 1 步将帮助您解决这个问题。
关于python - 你如何阻止 numpy 多线程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17053671/