4

所以我拿了下面的代码,运行它,实际上什么也没发生。Python 表现得好像它已经完成了一切(也许它已经完成了),但没有打印出来。任何帮助使它工作将不胜感激!

import multiprocessing

def worker(number):
    print number
    return

if __name__ == '__main__':
    test = multiprocessing.Process(target=worker, args=[0,1,2,3,4])
    test.start()
4

3 回答 3

4

您的代码实际上应该导致错误。的args参数multiprocessing.Process()不会为每个参数打开一个进程,它只是将列表中的参数提供给单个函数,然后在子进程中调用该函数。要像这样运行 5 个单独的实例,您必须执行以下操作:

import multiprocessing

def worker(number):
    print number
    return

if __name__ == '__main__':
    procs = []

    for i in range(5):
        procs.append(multiprocessing.Process(target=worker, args=[i]))

    [proc.start() for proc in procs]
于 2013-03-05T23:55:48.957 回答
0

您的代码尝试worker(0,1,2,3,4)在新进程中运行。如果要worker()在多个进程中并行执行函数:

from multiprocessing import Pool

def worker(number):
    return number*number

if __name__ == '__main__':
    pool = Pool() # use all available CPUs
    for square in pool.imap(worker, [0,1,2,3,4]):
        print(square)
于 2013-03-06T00:09:09.427 回答
0

当我运行它时,您的代码会导致错误。由于 args 使用逗号进行解析,因此您需要指定整个数组由单个参数组成。

import multiprocessing

def worker(number):
    print number
    return

if __name__ == '__main__':
    test = multiprocessing.Process(target=worker, args=([0,1,2,3,4],))
    test.start()
    test.join()

另外,不要忘记在最后加入该过程。

于 2014-12-04T13:52:07.737 回答