python多进程_利用python的多进程实现并行计算

在任何实际问题中,将程序并行化一般而言不是一个好的选择。因为除了要考虑问题本身是否具有并行的特征外,在编程的过程中,还涉及到计算资源的调度和处理。这样一来,写并行程序经常会得不偿失。例如矩阵的乘法实际上已经比较困难了,当然这类问题有已经写好的库可以用,例如scalapack等。

但是具体到一些特定的问题,比方程序的过程是完全一样的,只是处理参数不同,这个时候并行的方式相对简单,可以利用python的multiprocessing库进行处理。这里给出一个具体的例子说明。

问题描述

例如要计算10000个数据的正弦值,如果是串行程序的话只需要:

from 

如果电脑有10个核的话,那么我们可以把任务等分成10份,然后每个核理论上只需要十分之一的时间,这样相当于加速了十倍。

为了实现这一点,首先要把上面的代码改写成一个函数,这个函数只处理其中1000个值,如下。

from 

如何调用多个进程

下面来看如何利用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:
        print(i.get())
    pause()

总结

当然我也只是找到相应的方案解决了在多核cpu加速的方法,具体的细节也不甚了解。从我测试的结果看,虽然达不到理想的加速,毕竟进程快慢是不一样的,不过对于缓解等待结果的焦虑还是很有帮助的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值