| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137 |
- from __future__ import absolute_import, division, print_function
- from ray import Language
- from ray._raylet import CppFunctionDescriptor, JavaFunctionDescriptor
- from ray.util.annotations import PublicAPI
- __all__ = [
- "java_function",
- "java_actor_class",
- "cpp_function",
- ]
- @PublicAPI(stability="beta")
- def java_function(class_name: str, function_name: str):
- """Define a Java function.
- Args:
- class_name: Java class name.
- function_name: Java function name.
- """
- from ray.remote_function import RemoteFunction
- return RemoteFunction(
- Language.JAVA,
- lambda *args, **kwargs: None,
- JavaFunctionDescriptor(class_name, function_name, ""),
- {},
- )
- @PublicAPI(stability="beta")
- def cpp_function(function_name: str):
- """Define a Cpp function.
- Args:
- function_name: Cpp function name.
- """
- from ray.remote_function import RemoteFunction
- return RemoteFunction(
- Language.CPP,
- lambda *args, **kwargs: None,
- CppFunctionDescriptor(function_name, "PYTHON"),
- {},
- )
- @PublicAPI(stability="beta")
- def java_actor_class(class_name: str):
- """Define a Java actor class.
- Args:
- class_name: Java class name.
- """
- from ray.actor import ActorClass
- return ActorClass._ray_from_function_descriptor(
- Language.JAVA,
- JavaFunctionDescriptor(class_name, "<init>", ""),
- {},
- )
- @PublicAPI(stability="beta")
- def cpp_actor_class(create_function_name: str, class_name: str):
- """Define a Cpp actor class.
- Args:
- create_function_name: Create cpp class function name.
- class_name: Cpp class name.
- """
- from ray.actor import ActorClass
- print("create func=", create_function_name, "class_name=", class_name)
- return ActorClass._ray_from_function_descriptor(
- Language.CPP,
- CppFunctionDescriptor(create_function_name, "PYTHON", class_name),
- {},
- )
- def _format_args(worker, args, kwargs):
- """Format args for various languages.
- Args:
- worker: The global worker instance.
- args: The arguments for cross language.
- kwargs: The keyword arguments for cross language.
- Returns:
- List of args and kwargs (if supported).
- """
- if not worker.load_code_from_local:
- raise ValueError(
- "Cross language feature needs --load-code-from-local to be set."
- )
- if kwargs:
- raise TypeError(
- f"Cross language remote functions does not support kwargs, "
- f"kwargs:{str(kwargs)}."
- )
- return args
- def _get_function_descriptor_for_actor_method(
- language: str, actor_creation_function_descriptor, method_name: str, signature: str
- ):
- """Get function descriptor for cross language actor method call.
- Args:
- language: Target language.
- actor_creation_function_descriptor:
- The function signature for actor creation.
- method_name: The name of actor method.
- signature: The signature for the actor method. When calling Java from Python,
- it should be string in the form of "{length_of_args}".
- Returns:
- Function descriptor for cross language actor method call.
- """
- if language == Language.JAVA:
- return JavaFunctionDescriptor(
- actor_creation_function_descriptor.class_name,
- method_name,
- signature,
- )
- elif language == Language.CPP:
- return CppFunctionDescriptor(
- method_name,
- "PYTHON",
- actor_creation_function_descriptor.class_name,
- )
- else:
- raise NotImplementedError(
- "Cross language remote actor method " f"not support language {language}"
- )
|