0

我有一个我希望多次处理的代码(多处理),并且多个进程中的每一个的输出都应该存储在一个公共内存中,然后进行相应的处理。

每个单独的进程执行一段代码(维护一个字典),并且每个进程应该将数据并排存储在一个公共内存中(或者并排或者如果不可能,那么最后存储所有字典。)

对于.eg

process1 ->  dict1,  
process2 -> dict2, 
process3 -> dict3

>main_dict = dict1 + dict2 + dict3

我正在用 Python 执行这段代码。

我也可以在这里进行多线程处理,但实际上多线程并不像我听说的那样并行......所以我可以进行多处理。请告诉我在多处理模式下维护这种场景的过程,而不会浪费太多时间或让处理器保持理想状态..

谢谢

4

2 回答 2

6

你会想看看多处理模块,虽然我不认为你可以用 Python 中的字典来共享内存——我认为你需要序列化它们并通过队列发送它们。

多线程实际上并不像我听说的那样并行......所以我可以进行多处理。请告诉我在多处理模式下维护这种场景的过程,而不会浪费太多时间或让处理器保持理想状态..

如果您不想离开处理器,那么您将不会获得任何额外的并行性,除非您受 IO 限制。

这意味着,如果你正在做大量的 CPU 工作,那么留在同一个处理器上进行多处理只会减慢你的速度。增加并行度的唯一方法是使用其他处理器。(即使它们是“虚拟”超线程 CPU。)

另一方面,如果您因从内存或网络中读取内容而减慢了速度(似乎并非如此),那么线程模块会更合理。但是由于GIL,它不会增加您的 CPU 并行度

简而言之:你要求的是矛盾的东西。弄清楚你真正需要什么,然后选择一种方法。

于 2012-04-11T17:37:02.703 回答
0

查看子流程模块。

在文档中有很多例子,你可以用它做什么。
最终,这可以帮助你解决你的问题......

于 2012-04-11T17:31:27.813 回答