def export_actor_class(self, Class, actor_creation_function_descriptor, actor_method_names): if self._worker.load_code_from_local: return # `current_job_id` shouldn't be NIL, unless: # 1) This worker isn't an actor; # 2) And a previous task started a background thread, which didn't # finish before the task finished, and still uses Ray API # after that. assert not self._worker.current_job_id.is_nil(), ( "You might have started a background thread in a non-actor " "task, please make sure the thread finishes before the " "task finishes.") job_id = self._worker.current_job_id key = (b"ActorClass:" + job_id.binary() + b":" + actor_creation_function_descriptor.function_id.binary()) actor_class_info = { "class_name": actor_creation_function_descriptor.class_name.split( ".")[-1], "module": actor_creation_function_descriptor.module_name, "class": pickle.dumps(Class), "job_id": job_id.binary(), "collision_identifier": self.compute_collision_identifier(Class), "actor_method_names": json.dumps(list(actor_method_names)) } check_oversized_pickle(actor_class_info["class"], actor_class_info["class_name"], "actor", self._worker) self._publish_actor_class_to_key(key, actor_class_info)
def export(self, remote_function): """Pickle a remote function and export it to redis. Args: remote_function: the RemoteFunction object. """ if self._worker.load_code_from_local: return function = remote_function._function pickled_function = pickle.dumps(function) check_oversized_pickle(pickled_function, remote_function._function_name, "remote function", self._worker) key = (b"RemoteFunction:" + self._worker.current_job_id.binary() + b":" + remote_function._function_descriptor.function_id.binary()) self._worker.redis_client.hset( key, mapping={ "job_id": self._worker.current_job_id.binary(), "function_id": remote_function._function_descriptor. function_id.binary(), "function_name": remote_function._function_name, "module": function.__module__, "function": pickled_function, "collision_identifier": self.compute_collision_identifier( function), "max_calls": remote_function._max_calls }) self._worker.redis_client.rpush("Exports", key)