Я пытаюсь использовать многопроцессорный пакет 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
и моей наивности в использовании этого пакета.
Спасибо заранее!