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