安装依赖: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)