Я создал учащегося (удаленный объект, украшенный @ray.remote
) в одном процессе Python, и теперь я хочу создать рабочего в новом процессе (запущенном python new_file.py
либо на той же машине, либо на другой машине) и подключить его к тот ученик. Как я могу добиться этого, используя ray? Предполагая, что новый работник находится на той же машине, что и обучающийся, но ответы на то, что они находятся на разных машинах, также приветствуются.
Как создать нового работника (запустив новый скрипт Python) и подключить его к существующему ученику
Ответы (1)
Спасибо за помощь, @RobertNishihara.
Вот пример, который я написал в соответствии с https://ray.readthedocs.io/en/latest/advanced.html#detached-actors, https://github.com/ray-project/ray/blob/72755563652ea153c0dc60c95e233f31a4c3082a/python/ray/experimental/named_actors.py#L22. и ray.init(address='auto')
от @RobertNishihara.
""" main.py that starts the server """
import time
import ray
@ray.remote
class Counter:
def __init__(self):
self.count = 0
def set_self_handler(self, handler):
self.handler = handler
def wait(self):
if self.count == 0:
time.sleep(1)
self.handler.wait.remote()
def increase(self, n):
self.count += n
def get_count(self):
return self.count
if __name__ == '__main__':
ray.init()
counter = Counter.options(name='CounterActor').remote()
counter.set_self_handler.remote(counter)
counter.wait.remote()
while ray.get(counter.get_count.remote()) == 0:
time.sleep(1)
print(ray.get(counter.get_count.remote()))
ray.shutdown()
"""increase.py, started by another python command"""
import ray
from test import Counter
if __name__ == '__main__':
ray.init(address='auto') # connect to the server that has been started by main.py
counter = ray.experimental.get_actor('CounterActor')
ray.get(counter.increase.remote(1))
При запуске increase.py
появится сообщение об ошибке, поскольку сервер был выключен main.py
.
2019-12-02 18:20:43,708 ОШИБКА worker.py:939 -- print_logs: соединение закрыто сервером. 2019-12-02 18:20:43,708 ОШИБКА worker.py:1039 -- listen_error_messages_raylet: соединение закрыто сервером. 2019-12-02 18:20:43,709 ОШИБКА import_thread.py:89 -- ImportThread: соединение закрыто сервером.
person
Maybe
schedule
02.12.2019
python new_file.py
либо на том же компьютере, либо на другом компьютере. В таком случае я не знаю, как связать его с процессом, который запускает учащегося, и как получить обработчик учащегося. - person Maybe   schedule 28.11.2019ray.init(...)
, например,ray.init(address='auto')
, а затем вы можете использовать API именованного актора в github.com/ray-project/ray/blob/master/python/ray/experimental/. Обратите внимание, что этот API может немного измениться в будущем (хотя функциональность останется). - person Robert Nishihara   schedule 30.11.2019