Как изменить атрибуты экземпляра при использовании python пакета Ray для параллельной обработки? - PullRequest
0 голосов
/ 19 января 2020

Допустим, у меня есть класс с именем List, экземпляр которого имеет атрибут list_, содержащий список чисел. Теперь я готов удвоить каждое число в списке, применяя метод double_value_via_index.

. На мой взгляд, эту задачу можно распараллелить, поскольку числа в списке не имеют ничего общего. Но кажется невозможным изменить self.list_, пока идет распараллеливание. Поэтому я предложил другой подход, при котором удвоенные значения будут возвращаться и присваиваться self.list_ через self.list_ = doubled_numbers.

Однако я все еще хочу знать, могут ли атрибуты экземпляра быть изменены в процессе распараллеливания или нет .

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

Код моего примера показан ниже.

import ray

class List:
    def __init__(self, list_):
        self.list_ = list_

    # attempt 1
    @ray.remote
    def double_value_via_index(self, index):
        self.list_[index] *= 2
        return None

    def double_all_values(self):
        ray.init()
        self_id = ray.put(self)
        results_id = [List.double_value_via_index.remote(self_id, index)
            for index in range(len(self.list_))]
        results = ray.get(results_id)
        ray.shutdown()
        return None

    # attempt 2
    @ray.remote
    def get_double_value_of_index(self, index):
        return self.list_[index] * 2

    def double_all_values_sol2(self):
        ray.init()
        self_id = ray.put(self)
        results_id = [List.get_double_value_of_index.remote(self_id, index)
            for index in range(len(self.list_))]
        doubled_numbers = ray.get(results_id)
        self.list_ = doubled_numbers
        ray.shutdown()
        return None

foo = List([1, 2, 3, 4])
foo.double_all_values()
print(f'Doubled values {foo.list_}') # [1, 2, 3, 4]

bar = List([1, 2, 3, 4])
bar.double_all_values_sol2()
print(f'Doubled values {bar.list_}') # [2, 4, 6, 8]

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