Source code for ray.cross_language

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",
]


[docs]@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"), {}, )
[docs]@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}" )