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

时间:2015-02-14 03:07:40

标签: 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(target=do, args=(6,))
    proc1.start()   
    proc2.start()

现在我的输出为1 2 3然后是1 .... 6。但我需要工作1 1 2 2即我想并行运行proc1和proc2(不是一个接一个)。

2 个答案:

答案 0 :(得分:0)

因此,只需使用map即可并行执行代码。我正在使用延迟(使用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
>>> 

我使用multiprocessing分叉pathos.multiprocessing,因为我是作者,而且我懒得在文件中对其进行编码。 pathos可让您在翻译中执行multiprocessing,但除此之外基本相同。

答案 1 :(得分:0)

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

job_server=pp.Server(ncpus=num_local_procs,ppservers=nodes)
result=[job() for job in job_server.submit(func,input) for arg in args]

您还可以在https://github.com/gopiks/mappy/blob/master/map.py

查看更多示例