python使用ray框架改进原有代码,实现多进程与分布式

安装依赖:pip install -i https://mirrors.aliyun.com/pypi/simple/ 'ray[default]'

ray框架可以在几乎不改变现有代码的基础上实现分布式与并行计算!!改变的只有传值的方式,与每个函数加上装饰器即可

对于常规的循环任务

def exponentiation_test(a, b):
    import time
    time.sleep(1) # 这里是为了看是否是真正的多进程,卡一下时间
    value = a ** b ** 3
    return a, b


if __name__ == '__main__':
    for value in range(100):
        value += 3
        print(exponentiation_test(value, value // 2))

使用多进程改写

这是针对上面的for循环改写的多进程执行for循环的操作,非常简单

import ray

ray.init(num_cpus=3) # 步骤一:初始化


# import psutil
# ray.init(num_cpus=psutil.cpu_count(logical=False)) # 使用全部的CPU

@ray.remote # 步骤二:多进程的函数添加@
def exponentiation_test(a, b):
    import time
    time.sleep(1)
    value = a ** b ** 3
    print(a, b)
    return a, b


if __name__ == '__main__':
    remote_id_list = [] # 步骤三:使用一个列表保存每个任务的id
    for value in range(100):
        value += 3
        exp_id = exponentiation_test.remote(value, value // 2) # 这里就开始自动调度多进程了
        remote_id_list.append(exp_id) # 把任务列表添加到列表中
    print("wakakakakak....")  # 步骤四:当执行这一行代码的时候,@ray.remote的代码仍在异步执行,并且返回一个任务id,除非使用ray.get(任务id)才会使程序等待直到这个任务id执行完成
    z = ray.get(remote_id_list[-1])  # 程序运行到get时会等待这个任务id执行完成
    print(z)

参考文章

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

呆萌的代Ma

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值