python实现多进程同时计算_利⽤python的多进程实现并⾏计
在任何实际问题中,将程序并⾏化⼀般⽽⾔不是⼀个好的选择。因为除了要考虑问题本⾝是否具有并⾏的特征外,在编程的过程中,还涉及到计算资源的调度和处理。这样⼀来,写并⾏程序经常会得不偿失。例如矩阵的乘法实际上已经⽐较困难了,当然这类问题有已经写好的库可以⽤,例如scalapack等。
但是具体到⼀些特定的问题,⽐⽅程序的过程是完全⼀样的,只是处理参数不同,这个时候并⾏的⽅式相对简单,可以利⽤python的multiprocessing库进⾏处理。这⾥给出⼀个具体的例⼦说明。
问题描述
例如要计算10000个数据的正弦值,如果是串⾏程序的话只需要:
from numpy import *
t=linspace(0,10,10000)
x=sin(t)
如果电脑有10个核的话,那么我们可以把任务等分成10份,然后每个核理论上只需要⼗分之⼀的时间,这样相当于加速了⼗倍。
为了实现这⼀点,⾸先要把上⾯的代码改写成⼀个函数,这个函数只处理其中1000个值,如下。
linspace numpy
from numpy import *
def newsin(i):
t=linspace(i,i+1,1000)
return sin(t)
如何调⽤多个进程
下⾯来看如何利⽤multiprocessing创建⼗个进程并进⾏计算。
from numpy import *
from multiprocessing import Pool # 导⼊多进程中的进程池
def newsin(i):
t=linspace(i,i+1,1000)
return sin(t)
if __name__ == '__main__':
p=Pool(10) #创建含有⼗个10个进程的进程池
results=[] #存放每⼀个进程返回的结果
for i in range(10): # 启动10个进程
r=p.apply_async(newsin,args=(i,)) # 产⽣⼀个⾮同步进程,函数newsin的参数⽤args传递
results.append(r) # 将返回结果放⼊results
p.close() #关闭进程池
p.join() #结束
如何获得每⼀个进程返回值
进程的返回值全部在results列表中,如果要获得相应的值可以⽤下⾯的⽅法。
for i in results:
())
pause()
总结
当然我也只是到相应的⽅案解决了在多核cpu加速的⽅法,具体的细节也不甚了解。从我测试的结果看,虽然达不到理想的加速,毕竟进程快慢是不⼀样的,不过对于缓解等待结果的焦虑还是很有帮助的。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。