2012-04-11 146 views
0

我有一个代码,我想多次处理(多处理),并且多个进程中的每个进程的输出都应该存储在一个公用内存中,然后进行相应的处理。Python中的多处理/多线程..?

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

对于.eg

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

>main_dict = dict1 + dict2 + dict3 

我执行这段代码在Python。

我也可以在这里做多线程,但多线程并不像我所听说的那么平行......所以我可以去做多处理。请告诉我过程,在多处理器模式保持这种情景不会浪费到太多的时间和离开处理器理想..

感谢

回答

0

看那subprocess模块。

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

+0

子进程更适合启动外部命令,OP似乎使用python代码。 – 2012-04-11 17:35:21

+0

我认为最简单/最好的方法仍然是使用多线程... – evotopid 2012-04-11 17:40:19

+0

-1。呼应塞德里克朱利安。 – 2012-04-11 19:16:55

6

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

多线程是不那么平行居然我也听说过。所以我可以去多。请告诉我过程,以维持这种在多模式方案的不浪费到太多的时间和离开处理器理想..

如果你不想离开处理器那么你就不除非你有IO限制,否则会得到任何额外的并行性。

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

另一方面,如果通过从内存或网络中读取内容(看起来并非如此)来减缓速度,则threading模块会更合理。但它并不会增加您的CPU并行度,因为这是因为GIL

简而言之:您要求的是矛盾的事情。找出你真正需要的东西,然后选择一种方法。