我在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想做...请分享想法..
答案 0 :(得分:0)
有两种可能性 - 多线程和多处理。多线程更方便,因为它允许您在所有工作线程之间自动共享全局状态,而不是显式传输它。但是在Python中,有一种称为"全局解释器的锁定" (GIL)使多个线程难以并行实际工作;他们往往会被阻挡在一起,只有一个线程实际上一次工作。多处理需要更多的设置,你必须明确地传输数据(这可能很昂贵),但它在实际使用多个处理器时更有效。
concurrent.futures
模块可以利用多线程和多处理,从而为您提供基于任务的并行性。这可能很棘手,但是一旦你这样做,它就是编写支持多处理器的代码的最有效方式。
最后,如果你的for循环对一堆数据进行相同的数学运算,你应该研究numpy
,并对你的数据进行矢量化。这是最困难的方法,但它也会给你最好的表现。