首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何从python中的几个进程返回字典?

如何从python中的几个进程返回字典?
EN

Stack Overflow用户
提问于 2022-09-22 12:54:20
回答 1查看 55关注 0票数 0

我正在做一些模拟,是可并行的。对于每个进程,我对存储在字典中的参数很感兴趣。例如,我有一本分层字典,一本丢失字典等等。好消息是,进程不需要在它们之间共享任何对象。我感兴趣的就是从进程中获得结果,并将它们合并到一个大文件中。

我目前的尝试效率不高,工作起来也有点不舒服。

  • 它效率低下,因为我正在通过共享内存对象从进程中检索结果。这意味着每当进程将结果保存到对象中时,我都使用互斥锁来锁定共享内存对象。如果所有进程都需要访问同一个对象,这是很好的,但在我的例子中,我只想要结果。因此,在进程之间传递共享对象在我的情况下是过度的。我只想让这个过程在完成后返回字典。

使用

  • 是不舒服的,因为每次我需要返回一些字典时,我都需要创建一个单独的字典,并调整每个字典的代码--不管是针对这个字典。最好将所有字典组合成一本大词典(字典字典),但出于某种原因,我可以共享字典对象,但不能共享字典字典。

下面是我当前解决方案的一个片段。

代码语言:javascript
运行
复制
# 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()
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-09-22 13:05:08

使用multiprocessing.Pool.starmap,您可以从每个进程返回每个dict,并在最后将它们合并成一个大数据集:

代码语言:javascript
运行
复制
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 
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73815013

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档