python基于multiprocessing的通用的并行计算框架

项目介绍

基于multiprocessing的通用的并行计算框架,用于计算密集型场景

github

https://github.com/conggova/mpparallizer.git

接口定义

class MPParallizer(object) :
    @staticmethod
    def parallize(paras , func , threads , para_serder = FakeSerDer , result_serder = FakeSerDer) 
    @staticmethod
    def parallize_with_general_paras(paras , general_paras , func , threads , para_serder = FakeSerDer , general_paras_serder = FakeSerDer , result_serder = FakeSerDer) 

parallize

对于一组参数paras ( 形如 [(para1 , para2 , …) , (para1 , para2 , …) , …] ) 和一个函数func( 必须是普通函数 , 调用形式为func(para1 , para2 , …) ),利用Python的Multiprocessing库做并行执行,得到一个结果列表。
para_serder和result_serder为对于每一组参数和结果的序列化工具类,实现SerDer接口(包括serialize和deserialize方法)。
默认的FakeSerDer也是SerDer的一种实现,即不做序列化和反序列化。

parallize_with_general_paras

带通用参数(general_paras)的并行化,如果在需要并行执行的一组参数中有某几个参数是相同的,我把它们称为通用参数,有时候把通用参数提出来能大大提高并行化的开销,尤其如果需要序列化和反序列化。
paras = [(para1 , para2 , …) , (para1 , para2 , …) , …]
general_paras = (general_para1 , general_para2 , …)
func 为函数,调用形式为(para1 , para2 , … , general_para1 , general_para2 , … )这种形式的输入
para_serder 是SerDer的实现 , 可以将一组para做序列化,并能对序列化的结果反序列化
general_paras_serder 是SerDer的实现 , 可以将general_paras做序列化,并能对序列化的结果反序列化
result_serder 是SerDer的实现 , 可以对func的返回结果做序列化和反序列化。
默认的FakeSerDer也是SerDer的一种实现,即不做序列化和反序列化。

SerDer的接口定义

class SerDer(object) :
    @staticmethod
    def serialize(para) 
    @staticmethod
    def deserialize(para) 

SerDer采用了pickle做序列化和反序列化
FakeSerDer不做序列化和反序列化

用例

from Parallizer.MPParallizer import MPParallizer
from Parallizer.FakeParallizer import FakeParallizer

from math import sqrt


def add(a , b) :
    return a + b

if __name__ == "__main__" :
    #注意,哪怕只有一个参数也要打包成一个元组
    paras = [(i,) for i in range(0 , 10)]
    print(paras)
    res = MPParallizer.parallize(paras , sqrt , 20)
    print(res)
    
    res = MPParallizer.parallize_with_general_paras(paras , [100 ] , add , 20)
    print(res)

输出

[(0,), (1,), (2,), (3,), (4,), (5,), (6,), (7,), (8,), (9,)]
[0.0, 1.0, 1.4142135623730951, 1.7320508075688772, 2.0, 2.23606797749979, 2.449489742783178, 2.6457513110645907, 2.8284271247461903, 3.0]
[100, 101, 102, 103, 104, 105, 106, 107, 108, 109]
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值