首页 > 解决方案 > 由不同进程填充的共享字典

问题描述

我正在尝试将一个需要 20k 项数组的进程划分为多个进程,定期计算数组的元素并用该处理的当前结果填充全局字典。

我的问题是返回字典,因为我需要将它放在一个地方以便稍后通过 HTTP 调用定期将其完整发送。

我的理由是在主进程/线程中有 dict 并将 20k 项分成 4 个进程的块,每个进程有大约 500 个线程,每个线程处理许多项,但似乎我不能只传递一个全局变量到所有进程并填充它,因为每个进程都会创建一个空变量,而我的全局变量中什么也没有。

我的想法是让每个进程通过 HTTP 将它们的结果发送到服务器,这将缓冲结果,然后将整个 dict 发送到目的地。但这会引入巨大的延迟,这是不可取的。

我怎样才能实现除法?有什么方法可以缓冲来自多个进程的结果,延迟时间最短?全局变量必须是字典。

标签: pythonmultithreadingmultiprocessing

解决方案


我相信您不能在子流程之间共享变量,或者至少,这不是特别容易。我也不确定你为什么需要这个来解决这个问题。

您是否考虑过使用 Python 的multiprocessing.Pool功能?可以在此处找到其带有示例的官方文档

其中的每个线程都可以处理您输入的一个子集dict。执行后,multiprocessing.Pool将返回每个进程的输出列表,该列表的长度等于使用的线程数。dict()一旦所有进程完成将所有数据收集到单个 dict() 中,您就可以将单独的输出合并为一个。那行得通吗?


推荐阅读