python - 由不同进程填充的共享字典
问题描述
我正在尝试将一个需要 20k 项数组的进程划分为多个进程,定期计算数组的元素并用该处理的当前结果填充全局字典。
我的问题是返回字典,因为我需要将它放在一个地方以便稍后通过 HTTP 调用定期将其完整发送。
我的理由是在主进程/线程中有 dict 并将 20k 项分成 4 个进程的块,每个进程有大约 500 个线程,每个线程处理许多项,但似乎我不能只传递一个全局变量到所有进程并填充它,因为每个进程都会创建一个空变量,而我的全局变量中什么也没有。
我的想法是让每个进程通过 HTTP 将它们的结果发送到服务器,这将缓冲结果,然后将整个 dict 发送到目的地。但这会引入巨大的延迟,这是不可取的。
我怎样才能实现除法?有什么方法可以缓冲来自多个进程的结果,延迟时间最短?全局变量必须是字典。
解决方案
我相信您不能在子流程之间共享变量,或者至少,这不是特别容易。我也不确定你为什么需要这个来解决这个问题。
您是否考虑过使用 Python 的multiprocessing.Pool
功能?可以在此处找到其带有示例的官方文档。
其中的每个线程都可以处理您输入的一个子集dict
。执行后,multiprocessing.Pool
将返回每个进程的输出列表,该列表的长度等于使用的线程数。dict()
一旦所有进程完成将所有数据收集到单个 dict() 中,您就可以将单独的输出合并为一个。那行得通吗?
推荐阅读
- javascript - Vuetify/Vuejs 单选组和复选框组设置为相同的 v-model
- sql-server - 如何在 SQL Server 中存储十六进制标识符
- powershell - Powershell 按日期和时间排序
- android - 如何在不同的活动上调用方法?
- vba - 使用 VBA 禁用 Excel 中的单元格
- karate - 我可以在空手道中使用具有多种可能类型的模糊匹配器吗?
- bash - 使用tail用最后4行覆盖文件以制作日志
- python - result.describe() 中的“freq”是真还是假?
- javascript - 在 render() 函数中定义函数组件是反模式吗?
- sql - oracle 忽略子查询中的无效标识符错误