diff --git a/python/ray/actor.py b/python/ray/actor.py index 51756b1a00fe..62c3c5e68b68 100644 --- a/python/ray/actor.py +++ b/python/ray/actor.py @@ -884,13 +884,15 @@ def _serialization_helper(self, ray_forking): "actor_id": self._ray_actor_id.id(), "class_name": self._ray_class_name, "actor_forks": self._ray_actor_forks, - "actor_cursor": self._ray_actor_cursor.id(), + "actor_cursor": self._ray_actor_cursor.id() + if self._ray_actor_cursor is not None else None, "actor_counter": 0, # Reset the actor counter. "actor_method_names": self._ray_actor_method_names, "method_signatures": self._ray_method_signatures, "method_num_return_vals": self._ray_method_num_return_vals, "actor_creation_dummy_object_id": self. - _ray_actor_creation_dummy_object_id.id(), + _ray_actor_creation_dummy_object_id.id() + if self._ray_actor_creation_dummy_object_id is not None else None, "actor_method_cpus": self._ray_actor_method_cpus, "actor_driver_id": self._ray_actor_driver_id.id(), "previous_actor_handle_id": self._ray_actor_handle_id.id() @@ -929,12 +931,14 @@ def _deserialization_helper(self, state, ray_forking): self.__init__( ray.ObjectID(state["actor_id"]), state["class_name"], - ray.ObjectID(state["actor_cursor"]), + ray.ObjectID(state["actor_cursor"]) + if state["actor_cursor"] is not None else None, state["actor_counter"], state["actor_method_names"], state["method_signatures"], state["method_num_return_vals"], - ray.ObjectID(state["actor_creation_dummy_object_id"]), + ray.ObjectID(state["actor_creation_dummy_object_id"]) + if state["actor_creation_dummy_object_id"] is not None else None, state["actor_method_cpus"], actor_driver_id, actor_handle_id=actor_handle_id, diff --git a/test/runtest.py b/test/runtest.py index 0a20dae380df..ed209299ecd6 100644 --- a/test/runtest.py +++ b/test/runtest.py @@ -1189,6 +1189,16 @@ def modify_and_set_array(self, array): test_array[0] = -1 assert_equal(test_array, test_actor.get_array.remote()) + # Check that actor handles work in Python mode. + + @ray.remote + def use_actor_handle(handle): + array = np.ones(10) + handle.set_array.remote(array) + assert np.alltrue(array == ray.get(handle.get_array.remote())) + + ray.get(use_actor_handle.remote(test_actor)) + class ResourcesTest(unittest.TestCase): def tearDown(self):