[英]Batch processing on multiple cores
我想在多个核心上批量处理文件。 我有以下场景:
我该如何实现这一目标? 我对multiprocessing.Pool()
, multiprocessing.Process()
和其他各种选项感到困惑。
谢谢。
为了演示Pool
我假设您的工作函数(使用文件名并生成一个数字)被命名为work
,并且20个文件标记为1.txt
,... 20.txt
。 设置它的一种方法如下,
from multiprocessing import Pool
pool = Pool(processes=4)
result = pool.map_async(work, ("%d.txt"%n for n in xrange(1,21)))
print sum(result.get())
此方法将为您完成步骤3和4的工作。
这很简单。
from multiprocessing import Pool
def process_file(filename):
return filename
if __name__ == '__main__':
pool = Pool()
files = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
results = pool.imap(process_file, files)
for result in results:
print result
Pool
自动默认为您拥有的处理器核心数。 此外,请确保您的处理功能可从文件导入,并且您的多处理代码位于if __name__ == '__main__':
。 如果没有,你将制作一个叉炸弹并锁定你的电脑。
虽然Jared的答案很棒,但我个人会使用futures
模块中的ProcessPoolExecutor
,甚至不用担心multiprocessing
:
with ProcessPoolExecutor(max_workers=4) as executor:
result = sum(executor.map(process_file, files))
当它变得有点复杂时, future
对象,或者futures.as_completed
,与multiprocessing
等价物相比可以非常漂亮。 当它变得更加复杂时, multiprocessing
就变得更加灵活和强大。 但是,当这是微不足道的时候,真的,几乎很难分辨出来。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.