Python中的多处理/多线程..?

gee*_*eek 0 python algorithm performance memory-management

我有一个我想要多次处理的代码(多处理),并且多个进程中的每一个的输出应该存储在一个公共存储器中,然后进行相应的处理.

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

对于.eg

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

>main_dict = dict1 + dict2 + dict3
Run Code Online (Sandbox Code Playgroud)

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

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

谢谢

quo*_*tor 6

您将要查看多处理模块,虽然我不认为您可以使用Python中的字典共享内存 - 我认为您将需要序列化它们并通过队列发送它们.

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

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

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

另一方面,如果通过从内存或网络中读取内容(这似乎不是这种情况)而放慢速度,则线程模块会更合理.但由于GIL,它不会增加您的CPU并行度

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