我正在进行CPU昂贵的计算,可以很容易地分成许多工作人员。但是,我必须在最后加入结果。问题是在使用多个隔离进程时不能使用共享内存,并且将计算输出从子进程发送到父进程的唯一方法是使用multiprocessing.Queue
,multiprocessing.Manager
或multiprocessing.Pool
。所有这些方法都会腌制对象并使用某种IPC发送它。
我计算了操作的所有不同部分,并且处理数据的过程更快,但是如果我不使用多处理,那么获取对象的速度太慢,而且总是更快。
有没有办法在使用multithreading library
时获得相同级别的共享内存?我希望能够做到这样的事情:
process = [None]*numProcess
#List where the processes should write in memory the output.
results = [None]*numProcess
m = float(len(nflow))/numProcess
nflow_for_process = [nflow[int(m*i):int(m*(i+1))] for i in range(numProcess)]
for i in xrange(numProcess):
p = Process(target=self.gatherFlowsProcess, args=(nflow_for_process[i]))
p.daemon = True
processes.append(p)
p.start()
#here I join all the results again.
results_tmp = results[0]
for d in results[1:]:
for tuple in d:
if results_tmp.has_key(tuple):
results_tmp[tuple].update(d[tuple])
else:
results_tmp[tuple] = d[tuple]
return results_tmp
答案 0 :(得分:0)
你可以尝试自己的泡菜词典,我建议使用莳萝模块(但你也可以使用其他模块),所以它看起来像这样:
import dill as pickle
dic = {...}
f = open('save.pkl', 'wb')
g = pickle.dump(dic, f)
f.close()
比你可以用来获取字典:
f = open('save.pkl', 'rb')
c = pickle.load(f) # c is now equal to dic
f.close()