【发布时间】:2013-06-17 02:54:23
【问题描述】:
我有一个包含 500 个输入文件的文件夹(所有文件的总大小约为 500[MB])。
我想编写一个 python 脚本,它执行以下操作:
(1)将所有输入文件加载到内存中
(2) 初始化一个空的 python 列表,稍后将使用该列表...参见项目符号 (4)
(3) 启动 15 个不同的(独立的)进程:每个进程都使用相同的输入数据 [来自(1)]——但使用不同的算法对其进行处理,从而产生不同的结果
(4) 我希望所有独立进程 [从步骤 (3)] 将它们的输出存储在同一个 python 列表中 [在步骤 (2) 中初始化的同一个列表]
一旦所有 15 个进程都完成运行,我将拥有包含所有 15 个独立进程的结果的 one python list。
我的问题是,是否可以在python 中有效地完成上述操作?如果是这样,您能否提供一个方案/示例代码来说明如何做到这一点?
注意 #1: 我将在强大的多核服务器上运行它;所以这里的目标是使用所有的处理能力,同时在所有独立进程之间共享一些内存 {input data, output list}。
注意 #2:我在 Linux 环境中工作
【问题讨论】:
-
这根本无法正常工作。由于对一个列表的所有争论,您可能不会从并发中看到太多好处。
-
@Rafe Kettler:你有什么建议?我的目标是能够在处理结束时“汇总”结果;有什么选择? (为了清楚起见,
output list的大小约为 100[MB])。 -
我可以看到它与 zeromq 一起工作。多个发布者,一个订阅者。订阅者管理列表。所以我的问题是#1:第三部分库在桌面上吗?和 #2:如何表示输出?
-
我会在独立列表上工作,然后立即将它们汇总。显然,这种方法会使用更多的内存,所以你可能不得不去磁盘一些。
-
@user3262424 如您所见,我将一个演示应用程序放在一起演示如何使用 0mq 做类似的事情。我认为问题的症结在于进程之间的通信。 zeromq 使这比多处理 IMO 提供的机制容易得多。它为您的特定问题增加的价值是一个订阅者与多个发布者进行通信。无论如何希望有帮助