Использование класса, методы которого оформлены @ ray.remote в другом каталоге - PullRequest
0 голосов
/ 19 января 2020

Я учусь использовать пакет python Ray для параллельного выполнения моего кода. Я столкнулся с проблемой с классом, методы которого украшены @ ray.remote.

Я могу импортировать класс в той же папке и выполнить метод в учебный класс. Однако после импорта класса в другой каталог он вызывает ModuleNotFoundError при вызове метода.

В соответствии с отслеживанием ошибки, похоже, проблема в десериализации процесс, когда программа не может найти требуемый модуль.

Ниже показан минимальный рабочий пример моей проблемы.

Structure of the directory.
folder/
    main/
        a_class.py
        process_in_main.py
    processing/
        process_not_in_main.py

Содержимое трех скриптов

# a_class.py
import ray

class Foo:
    @ray.remote
    def single_function(self):
        return None

    def combined_function(self):
        ray.init()
        results_id = [Foo.single_function.remote(self) for i in range(5)]
        results = ray.get(results_id)
        ray.shutdown()
        return None



# process_in_main.py, it works fine
import a_class
instance = a_class.Foo()
instance.combined_function()



# process_not_in_main.py
import sys
sys.path.append('../')
from main import a_class

instance = a_class.Foo()
instance.combined_function() # it will raise ModuleNotFoundError: No module named 'main'

Любая помощь будет оценена. Заранее спасибо.

1 Ответ

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

Пожалуйста, проверьте, что импорт действительно разрешим. Оба сценария работают для меня, когда я устанавливаю Pythonpath в качестве родительского для папки и использую абсолютный импорт, который начинается с «папки».

Пример Dockerised здесь (так как я сейчас нахожусь на windows): https://github.com/FelixKleineBoesing/stackoverflowSnippets/tree/master/question59809169

...