Общий словарь python с использованием луча?

Читая документы Рэя, я вижу, что он поддерживает сериализацию dicts изначально («Сериализовать напрямую» ), Но я не могу понять, что это значит, или что мне делать, чтобы использовать эти сериализованные объекты.
Учитывая, что у меня есть следующий поток:

import ray
ray.init()

dict_1 = {}
dict_2 = {}

@ray.remote
def f(x):
    dict_1[x] = x*x
    dict_2[x] = x*x*x
    return x

futures = [f.remote(i) for i in range(4)]
print(ray.get(futures))

Должен ли я что-то сделать, чтобы гарантировать поточно-безопасное поведение?


person DsCpp    schedule 22.04.2020    source источник


Ответы (1)


Функции удаленного управления Ray работают в разных «процессах». Это означает, что когда вы запускаете 4 разных удаленных вызова, у него будет другое адресное пространство (так что то, что вы делаете в своем коде, в основном не так полезно). Под сериализацией это означает, что когда вы вызываете f.remote с аргументом i, объект i (который является вашим аргументом) должен быть сериализован, потому что он будет отправлен другим процессам (чтобы Ray поддерживал распараллеливание). Ray делает этот процесс очень быстрым, используя общую память для больших объектов.

Кроме того, если вы хотите иметь общие состояния, вы можете использовать акторов (https://ray.readthedocs.io/en/latest/actors.html). Когда вы используете актор, вам не нужно заботиться о безопасности потоков, потому что обновления состояния для акторов происходят в том порядке, в котором актор вызывается.

person Sang    schedule 22.04.2020
comment
Значит, с актерами глобальные словари останутся глобальными? вне актера? - person DsCpp; 22.04.2020
comment
Нет, невозможно иметь глобальные переменные, которые совместно используются всеми процессами точно так, как вы пытаетесь это сделать (в вашем примере будет отдельная копия словаря в основном скрипте и в рабочий процесс). У субъектов есть состояние, которое может быть изменено, но чтобы получить доступ к этому состоянию из основного скрипта, главный скрипт должен будет вызвать метод у актора, который возвращает соответствующее состояние. - person Robert Nishihara; 22.04.2020