0

我阅读了多处理文档。在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(不是一个接一个)。

4

2 回答 2

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
>>> 

我正在使用multiprocessingfork pathos.multiprocessing,因为我是作者,我懒得在文件中编码。 pathos使您可以multiprocessing在解释器中进行操作,但其他方面基本相同。

于 2015-02-14T16:04:01.650 回答
0

您也可以使用库 pp。我更喜欢 pp 而不是 multiprocessing,因为它允许在网络上的不同 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

于 2015-11-26T06:03:46.773 回答