对于python中的循环并行

时间:2014-08-22 11:46:08

标签: parallel-processing python-multithreading pp-python-parallel

我在python中进行并行化工作..我有大量的计算需要并行。 起初我有很大的for循环(例如1000个粒子)所以我的过程不是独立的,我需要独立的过程来使它并行。所以我将FOR循环划分为2个FOR循环计算了500个,500个粒子......我需要在两个不同的核心(处理器)上运行这两个独立的循环......那么可能吗? 如果是的话怎么样?请分享一些指导..

for i in particle1
   some processes
   ......

 print ( something)

第二次循环

for i in particles2
    someprocess....

print (something1)

现在我想在结合

这两个不同的过程

所以......

 print (something + something1)

这我是exatclty想做...请分享想法..

1 个答案:

答案 0 :(得分:0)

有两种可能性 - 多线程和多处理。多线程更方便,因为它允许您在所有工作线程之间自动共享全局状态,而不是显式传输它。但是在Python中,有一种称为"全局解释器的锁定" (GIL)使多个线程难以并行实际工作;他们往往会被阻挡在一起,只有一个线程实际上一次工作。多处理需要更多的设置,你必须明确地传输数据(这可能很昂贵),但它在实际使用多个处理器时更有效。

concurrent.futures模块可以利用多线程和多处理,从而为您提供基于任务的并行性。这可能很棘手,但是一旦你这样做,它就是编写支持多处理器的代码的最有效方式。

最后,如果你的for循环对一堆数据进行相同的数学运算,你应该研究numpy,并对你的数据进行矢量化。这是最困难的方法,但它也会给你最好的表现。