我有一些来自这样的教程的简单代码:
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,所以在操作系统之间移动多处理模块时是否有任何常见的错误需要注意?
哦,是的,脚本的输出看起来像这样:
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 都是相同的,因为上面的脚本在运行时是调用子进程的父进程,每个子进程都是不同的进程。那么多处理是否会自动检测和处理多个内核,还是我必须告诉它在哪里查找?此外,根据我在搜索这个问题的副本时所读到的内容,我不应该产生比核心更多的进程,因为它会占用原本用于计算的系统资源。
提前感谢您的帮助,我的论文爱您。