python общий словарь с использованием луча? - PullRequest
0 голосов
/ 22 апреля 2020

Чтение Ray docs Я вижу, что он поддерживает сериализацию 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))

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

1 Ответ

0 голосов
/ 22 апреля 2020

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

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

...