如何在python中实现单程序多数据(spmd)

如何在python中实现单程序多数据(spmd),python,parallel-processing,multiprocessing,parallel-python,dispy,Python,Parallel Processing,Multiprocessing,Parallel Python,Dispy,我读了多处理文档。在python中,发现可以将任务分配给不同的cpu内核。我喜欢并行运行以下代码(作为开始) from multiprocessing import Process import os def do(a): for i in range(a): print i if __name__ == "__main__": proc1 = Process(target=do, args=(3,)) proc2 = Process(targ

我读了多处理文档。在python中,发现可以将任务分配给不同的cpu内核。我喜欢并行运行以下代码(作为开始)

from multiprocessing import Process
import os

def do(a):
    for i in range(a):
        print i    

if __name__ == "__main__":
    proc1 = Process(target=do, args=(3,))
    proc2 = Process(target=do, args=(6,))
    proc1.start()   
    proc2.start()

现在我得到的输出是1 2 3,然后是1…6。但是我需要像12 ie一样工作,我希望并行运行proc1和proc2(而不是一个接一个地运行)。

因此,您可以通过使用
映射来并行执行代码。我正在使用延迟(使用
time.sleep
)来降低代码的速度,使其按您的要求打印。如果不使用睡眠,第一个进程将在第二个进程开始之前完成…您将得到
0 1 2 0 1 2 3 4 5

>>> from pathos.multiprocessing import ProcessingPool as Pool
>>> p = Pool()
>>> 
>>> def do(a): 
...   for i in range(a):
...     import time
...     time.sleep(1)
...     print i
... 
>>> _ = p.map(do, [3,6])
0
0
1
1
2
2
3
4
5
>>> 

我使用的是
多处理
fork
pathos.multiprocessing
,因为我是作者,我太懒了,无法将其编码到文件中<代码>病理
允许您在解释器中执行
多处理
,但在其他方面基本相同。

您也可以使用库pp。我更喜欢pp而不是多处理,因为它允许跨网络上的不同CPU进行并行处理。函数(func)可通过以下简单代码应用于输入列表(arg):

job_server=pp.Server(ncpus=num_local_procs,ppservers=nodes)
result=[job() for job in job_server.submit(func,input) for arg in args]
您还可以在以下网址查看更多示例: