-1

我正在 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)

这是我非常想做的事情。请分享想法。

4

1 回答 1

0

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

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

最后,如果您的 for 循环正在对一堆数据执行相同的数学运算,您应该查看numpy并矢量化您的数据。这是最困难的方法,但它也会给你最好的性能。

于 2014-08-22T11:58:24.177 回答