如何判断Python的多处理模块是否正在使用我的所有内核进行计算?
作者:互联网
我有一些像这样的教程的简单代码:
from multiprocessing import Process, Lock
import os
def f(i):
print 'hello world', i
print 'parent process:', os.getppid()
print 'process id:', os.getpid(), "\n\n"
if __name__ == '__main__':
lock = Lock()
for num in range(10):
p = Process(target=f, args=(num,))
p.start()
p.join()
如何判断这是否同时使用了我的核心?目前我正在运行Ubuntu 11.04 w / 3 GB RAM和Intel Core 2 Duo @ 2.2GHz.
我正在学习的这个项目将被转移到一个人的办公室里的一台巨大的机器上,比我现在拥有的马力要大得多.具体来说,处理器至少有4个内核,我想确保我的算法能够自动检测并利用所有可用内核.此外,该系统可能不是Linux,因此在OS之间移动多处理模块时,我是否需要注意任何常见的失误?
哦,是的,脚本的输出看起来像这样:
hello world 0
parent process: 29362
process id: 29363
hello world 1
parent process: 29362
process id: 29364
hello world 2
parent process: 29362
process id: 29365
and so on...
所以从目前为止我所知道的,PPID都是一样的,因为上面运行的脚本是调用子进程的父进程,每个进程都是一个不同的进程.那么多处理自动检测和处理多个核心,或者我必须告诉它在哪里看?此外,根据我在搜索此问题的副本时所阅读的内容,我不应该产生比核心更多的进程,因为它会占用原本用于计算的系统资源.
在此先感谢您的帮助,我的论文爱你.
解决方法:
这是一个方便的小命令,用于从命令行监视我的内核:
watch -d "mpstat -P ALL 1 1 | head -n 12"
请注意,mpstat命令必须在您的系统上可用,您可以通过安装sysstat软件包在Ubuntu上获取该命令.
sudo apt-get install sysstat
如果要从Python检测可用内核的数量,可以使用multiprocessing.cpu_count()函数执行此操作.在具有超线程的Intel CPU上,此数字将是实际内核数量的两倍.启动与可用内核一样多的进程通常可以扩展以完全占用计算机上的所有内核,只要这些进程有足够的工作要做,并且不会因为通信而陷入困境. Linux的进程调度程序将从那里开始.
标签:python,module,multiprocessing,porting,cpu-cores 来源: https://codeday.me/bug/20190626/1291153.html