Вы правы, есть один Simulator
актер. Метод step
вызывается у актера четыре раза. Это создает четыре задачи, которые актер будет выполнять последовательно.
Если это все, что делает приложение, то нет смысла создавать обычный объект Python и вызывать метод четыре раза. Тем не менее, этот подход дает вам возможность создать двух Simulator
акторов и вызывать методы для них параллельно. Например, вы можете написать следующее.
# This assumes you've already called "import ray", "import gym",
# "ray.init()", and defined the Simulator class from the original
# post.
# Create two simulators.
simulator1 = Simulator.remote()
simulator2 = Simulator.remote()
# Step each of them four times.
observation_ids1 = []
observation_ids2 = []
for _ in range(4):
observation_ids1.append(simulator1.step.remote(0))
observation_ids2.append(simulator2.step.remote(0))
# Get the results.
observations1 = ray.get(observation_ids1)
observations2 = ray.get(observation_ids2)
В этом примере каждый симулятор выполняет четыре задачи последовательно, но два симулятора работают параллельно. Вы можете проиллюстрировать это, поместив оператор time.sleep(1)
в метод step
и указав время, необходимое для полного вычисления.