python - 类内的射线多处理(TypeError:参数缺少默认值)
问题描述
我正在尝试使用 python 多进程包ray来并行化一个类中的卷积过程。
这意味着我正在使用@ray.remote
装饰器将函数设置为类函数。
但是,当我这样做时,我会收到与参数默认值有关的错误。
我是使用射线和装饰器的新手,所以我想知道是否有人对我哪里出错有一些建议,因为我认为这不像为类函数提供可选的默认参数那样简单None
,例如。
这是代码的简化版本:
import numpy as np
import psutil
import ray
from astropy.convolution import convolve
class test_class:
def __init__(self,cube):
self.cube = cube
@ray.remote
def func(self, cube, psf):
cube = convolve(cube, psf)
return cube
def calculation(self):
num_cpus = psutil.cpu_count(logical=False)
ray.shutdown()
ray.init(num_cpus=num_cpus)
filters = np.array([[0,.5,0],[.5,.7,.5],[0,.5,0]])
results = []
for i in range(self.cube.shape[2]):
results.append(self.func.remote(self.cube[:,:,i],filters))
results = np.array(ray.get(results)).T
ray.shutdown()
return results
运行代码...
cube = np.random.uniform(0,1,(100,100,10))
new_cube = test_class(cube).calculation()
以及由此产生的错误:
TypeError:“psf”参数缺少默认值
我发现了一个类似的帖子,但我不确定这两个问题是否相似,因为处理ray
不同的执行以及我对使用这个包的天真。
提前谢谢了!
解决方案
这个问题是通过移动类函数来解决的:
@ray.remote
def func(self, cube, psf):
cube = convolve(cube, psf)
return cube
...在类函数self.calculation
中,并删除self
更新:失败的原因可以在这篇文章中看到
推荐阅读
- kotlin - 在类jooq中使用primarykey和references方法有什么好处
- c++ - 如何在 C++ 中将 long int 打印到屏幕上?
- php - 如果我不需要得到回复,如何使用 Wordpress wp_remote_post?
- asp.net - 访问 UNC 虚拟目录上的路径被拒绝
- php - 在路由 laravel 之外使用验证类
- graph-theory - 用点强制直边和正交边
- r - 在传单中显示/隐藏分组图层
- scala - 重新分配可变集的并集
- python - 根据条件分离列表项 - Python
- database - Cassandra - 处理对各种字段子集进行过滤的多个查询