Python 多处理池什么都不做
Pythons multiprocessing's Pool does nothing
我为 运行 任意函数并行编写了以下辅助函数。
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' 语句开头。程序在输出 "starting multiprocessing with 3 cores".
后结束
从多处理中使用 Process 通常可以正常工作,但它使我的 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。
您可以将 apply_async
替换为 apply
以查看错误输出。顺便说一句,它适用于 python3,我不确定 python2.7.
我为 运行 任意函数并行编写了以下辅助函数。
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' 语句开头。程序在输出 "starting multiprocessing with 3 cores".
后结束从多处理中使用 Process 通常可以正常工作,但它使我的 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。
您可以将 apply_async
替换为 apply
以查看错误输出。顺便说一句,它适用于 python3,我不确定 python2.7.