我编写了以下辅助函数来并行运行任意函数。
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。
答案 0 :(得分:-1)
您可以将apply_async
替换为apply
以查看错误输出。顺便说一下,它适用于python3,我对python2.7不太确定。