我正在做一些模拟,是可并行的。对于每个进程,我对存储在字典中的参数很感兴趣。例如,我有一本分层字典,一本丢失字典等等。好消息是,进程不需要在它们之间共享任何对象。我感兴趣的就是从进程中获得结果,并将它们合并到一个大文件中。
我目前的尝试效率不高,工作起来也有点不舒服。
使用
下面是我当前解决方案的一个片段。
# set up the shared dictionary for the processes
manager = mp.Manager()
layers_dict = manager.dict()
loss_dict = manager.dict()
for k, v in self.output_nodes.items():
# fork the processes
child_processes = []
for process_num in range(N_PROCESSES):
p = Process(target=EqProp(self).train, args=[X, Y, self.batch_size, process_num, N_PROCESSES, layers_dict, loss_dict])
p.start()
child_processes.append(p)
# wait until all processes are done
for process in child_processes:
process.join()
发布于 2022-09-22 13:05:08
使用multiprocessing.Pool.starmap
,您可以从每个进程返回每个dict,并在最后将它们合并成一个大数据集:
import multiprocessing
# prepare arguments
child_processes_args = []
for k, v in self.output_nodes.items():
for process_num in range(N_PROCESSES):
child_processes_args.append((X, Y, self.batch_size, process_num, N_PROCESSES, layers_dict, loss_dict))
# run execution
pool = multiprocessing.Pool(processes = 3)
results = pool.starmap(EqProp(self).train, child_processes_args)
# get results
results_dict = {}
for result in results:
results_dict[<your-key>] = result
https://stackoverflow.com/questions/73815013
复制相似问题