лучевая многопроцессорная обработка внутри класса (TypeError: параметр не имеет значения по умолчанию) - PullRequest
0 голосов
/ 10 января 2020

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

Большое спасибо заранее!

1 Ответ

0 голосов
/ 16 января 2020

Эта проблема была решена путем перемещения функции класса:

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

... внутри функции класса self.calculation и удаления self


Обновление: причину неудачи можно увидеть в этом посте

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...