类内的射线多重处理(TypeError:参数缺少默认值)

问题描述 投票:0回答:1

我正在尝试使用python多进程程序包ray,从一个类内部并行化卷积过程。

这意味着我正在使用@ray.remote装饰器将函数设置为类函数。

但是,执行此操作时,我会遇到与参数默认值有关的错误。

我不熟悉ray和装饰器,所以我想知道是否有人对我要去哪里提出建议,因为我不认为这像为类函数提供可选的默认参数(如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的执行方式不同,以及我对使用此程序包的幼稚态度,我不确定两个问题是否相同。

非常感谢!

python multiprocessing default-value ray
1个回答
0
投票

此问题通过移动类函数解决:

@ray.remote
    def func(self, cube, psf):
        cube = convolve(cube, psf)
        return cube

...在类函数self.calculation内,并删除self


更新:失败的原因可以在this post中看到

© www.soinside.com 2019 - 2024. All rights reserved.