【发布时间】:2017-11-30 05:56:42
【问题描述】:
我想了解我使用multiprocessing.Pool 的方式是否有效。我想并行执行的方法是一个脚本,它读取某个文件,进行计算,然后将结果保存到不同的文件中。我的代码如下所示:
from multiprocessing import Pool, TimeoutError
import deepdish.io as dd
def savefile(a,b,t,c,g,e,d):
print a
dd.save(str(a),{'b':b,'t':t,'c':c,'g':g,'e':e,'d':d})
def run_many_calcs():
num_processors = 6
print "Num processors - ",num_processors
pool = Pool(processes=num_processors) # start 4 worker processes
for a in ['a','b','c','d','e','f','g','t','y','e','r','w']:
pool.apply(savefile,args=(a,4,5,6,7,8,1))
我怎样才能看到一个进程在其中一个处理器中完成后立即继续到下一个文件?
【问题讨论】:
-
您有理由怀疑是这种情况吗?我们需要了解
dd.save()内部发生的一些事情,以评估这是否是一个好的设计。如果它受 I/O 限制(尤其是所有进程相互独立读取同一个文件时),您只会造成拥塞。 -
我不认为从多个进程同时读取同一个文件会是一个大问题——操作系统应该很容易处理它——但是它们都写入相同的“不同”输出文件?后者可能是一个重要的瓶颈。
-
@martineau 每个进程都将数据保存到具有相同结构的不同输出文件中。后来我对文件进行后处理以在熊猫中构建一个数据框,但我认为保存每个文件会更好,所以如果程序由于某种原因崩溃我仍然需要完成一些工作..
-
这听起来是个好策略。您希望如何“看到”另一个进程在完成时开始?换句话说,为什么你在
savefile()中已经拥有的print a不够好?反正你为什么要看这个。我怀疑这里可能存在 X:Y 问题...
标签: python multithreading multiprocessing python-multiprocessing