如何在python中实现单程序多数据(spmd)
我读了多处理文档。在python中,发现可以将任务分配给不同的cpu内核。我喜欢并行运行以下代码(作为开始)如何在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
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
>>>
我使用的是多处理
forkpathos.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]
您还可以在以下网址查看更多示例: