mirror of
https://github.com/wassname/ray.git
synced 2026-07-02 07:21:46 +08:00
Implement Detached Actor (#6036)
* Arg propagation works * Implement persistent actor * Add doc * Initialize is_persistent_ * Rename persistent->detached * Address comment * Make test passes * Address comment * Python2 compatiblity * Fix naming, py2 * Lint
This commit is contained in:
+27
-2
@@ -307,7 +307,9 @@ class ActorClass(object):
|
||||
memory=None,
|
||||
object_store_memory=None,
|
||||
resources=None,
|
||||
is_direct_call=None):
|
||||
is_direct_call=None,
|
||||
name=None,
|
||||
detached=False):
|
||||
"""Create an actor.
|
||||
|
||||
This method allows more flexibility than the remote method because
|
||||
@@ -325,6 +327,9 @@ class ActorClass(object):
|
||||
resources: The custom resources required by the actor creation
|
||||
task.
|
||||
is_direct_call: Use direct actor calls.
|
||||
name: The globally unique name for the actor.
|
||||
detached: Whether the actor should be kept alive after driver
|
||||
exits.
|
||||
|
||||
Returns:
|
||||
A handle to the newly created actor.
|
||||
@@ -341,6 +346,23 @@ class ActorClass(object):
|
||||
|
||||
meta = self.__ray_metadata__
|
||||
|
||||
if detached and name is None:
|
||||
raise Exception("Detached actors must be named. "
|
||||
"Please use Actor._remote(name='some_name') "
|
||||
"to associate the name.")
|
||||
|
||||
# Check whether the name is already taken.
|
||||
if name is not None:
|
||||
try:
|
||||
ray.experimental.get_actor(name)
|
||||
except ValueError: # name is not taken, expected.
|
||||
pass
|
||||
else:
|
||||
raise ValueError(
|
||||
"The name {name} is already taken. Please use "
|
||||
"a different name or get existing actor using "
|
||||
"ray.experimental.get_actor('{name}')".format(name=name))
|
||||
|
||||
# Set the actor's default resources if not already set. First three
|
||||
# conditions are to check that no resources were specified in the
|
||||
# decorator. Last three conditions are to check that no resources were
|
||||
@@ -403,7 +425,7 @@ class ActorClass(object):
|
||||
actor_id = worker.core_worker.create_actor(
|
||||
function_descriptor.get_function_descriptor_list(),
|
||||
creation_args, meta.max_reconstructions, resources,
|
||||
actor_placement_resources, is_direct_call)
|
||||
actor_placement_resources, is_direct_call, detached)
|
||||
|
||||
actor_handle = ActorHandle(
|
||||
actor_id,
|
||||
@@ -417,6 +439,9 @@ class ActorClass(object):
|
||||
worker.current_session_and_job,
|
||||
original_handle=True)
|
||||
|
||||
if name is not None:
|
||||
ray.experimental.register_actor(name, actor_handle)
|
||||
|
||||
return actor_handle
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user