Pythons multiprocessing的Pool什么都不做

时间:2017-05-04 06:45:47

标签: python process multiprocessing pool

我编写了以下辅助函数来并行运行任意函数。

import multiprocessing


def runParallel(fns=[], args=[]):
    print('Starting multiprocessing with %i cores' % (multiprocessing.cpu_count() - 1))
    pool = multiprocessing.Pool(processes=multiprocessing.cpu_count() - 1)
    for fn, arg in zip(fns, args):
        pool.apply_async(fn, (arg,))
    pool.close()
    pool.join()

我用一个函数的itertools.repeat调用和一个文件名列表调用该函数

runParallel(itertools.repeat(self.processFile), fileNamesAndPaths)

processFile是一个带有签名

的类方法
def processFile(self, filename):

以一个永不执行的'print'语句开头。程序在输出“开始多核处理3核”后结束。

使用多处理中的进程通常可以工作,但是它会使我的CPU充满一些它无法处理并最终冻结的进程,但至少会调用processFile函数

from multiprocessing import Process


def runParallel(fns=[], args=[]):
    proc = []
    for fn, arg in zip(fns, args):
        p = Process(target=fn, args=(arg,))
        p.start()
        proc.append(p)
    for p in proc:
        p.join()

这就是为什么我想使用池,因为根据我的理解,它可以处理任何给定时间的进程数量。

如果它有用,我在64位Windows机器上运行2.7.10。

1 个答案:

答案 0 :(得分:-1)

您可以将apply_async替换为apply以查看错误输出。顺便说一下,它适用于python3,我对python2.7不太确定。