我编写了以下辅助功能以并行运行任意功能。
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):
,然后以"打印"态度开始,从未执行。在输出"启动与3个内核"。
之后,该程序刚刚结束使用多处理的过程一般可以起作用,但它用它无法处理的多种过程充斥着我的CPU,最终会冻结,但是至少该过程文件函数称为
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运行。
您可以用apply
替换apply_async
来查看错误输出。顺便说一句,它在python3中起作用,我不确定python2.7。