我阅读了多处理文档。在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(不是一个接一个)。
答案 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]
查看更多示例