如何判断 Python 的 Multiprocessing 模块是否正在使用我的所有内核进行计算?

use*_*922 5 python porting module multiprocessing cpu-cores

我有一些来自这样的教程的简单代码:

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()
Run Code Online (Sandbox Code Playgroud)

我怎么知道这是否使用了我的两个内核?目前我正在运行 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...
Run Code Online (Sandbox Code Playgroud)

因此,据我目前所知,PPID 都是相同的,因为运行时上面的脚本是调用子进程的父进程,每个子进程都是不同的进程。那么多处理是自动检测和处理多个核心,还是我必须告诉它在哪里看?此外,从我在搜索此问题的副本时阅读的内容来看,我不应该产生比核心数更多的进程,因为它会占用原本用于计算的系统资源。

在此先感谢您的帮助,我的论文爱您。

小智 0

如果您使用的是 UNIX 系统,您可以尝试运行“top”命令并查看同时显示的进程数量。尽管它有些经验性,但很多时候只需查看进程列表就可以让您看到倍数。

尽管查看您的脚本,但我看不出您在哪里调用多个进程。您可以导入 multiprocessing.pool 然后将您的函数映射到不同的处理器。
http://docs.python.org/library/multiprocessing.html