cross_language.py 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137
  1. from __future__ import absolute_import, division, print_function
  2. from ray import Language
  3. from ray._raylet import CppFunctionDescriptor, JavaFunctionDescriptor
  4. from ray.util.annotations import PublicAPI
  5. __all__ = [
  6. "java_function",
  7. "java_actor_class",
  8. "cpp_function",
  9. ]
  10. @PublicAPI(stability="beta")
  11. def java_function(class_name: str, function_name: str):
  12. """Define a Java function.
  13. Args:
  14. class_name: Java class name.
  15. function_name: Java function name.
  16. """
  17. from ray.remote_function import RemoteFunction
  18. return RemoteFunction(
  19. Language.JAVA,
  20. lambda *args, **kwargs: None,
  21. JavaFunctionDescriptor(class_name, function_name, ""),
  22. {},
  23. )
  24. @PublicAPI(stability="beta")
  25. def cpp_function(function_name: str):
  26. """Define a Cpp function.
  27. Args:
  28. function_name: Cpp function name.
  29. """
  30. from ray.remote_function import RemoteFunction
  31. return RemoteFunction(
  32. Language.CPP,
  33. lambda *args, **kwargs: None,
  34. CppFunctionDescriptor(function_name, "PYTHON"),
  35. {},
  36. )
  37. @PublicAPI(stability="beta")
  38. def java_actor_class(class_name: str):
  39. """Define a Java actor class.
  40. Args:
  41. class_name: Java class name.
  42. """
  43. from ray.actor import ActorClass
  44. return ActorClass._ray_from_function_descriptor(
  45. Language.JAVA,
  46. JavaFunctionDescriptor(class_name, "<init>", ""),
  47. {},
  48. )
  49. @PublicAPI(stability="beta")
  50. def cpp_actor_class(create_function_name: str, class_name: str):
  51. """Define a Cpp actor class.
  52. Args:
  53. create_function_name: Create cpp class function name.
  54. class_name: Cpp class name.
  55. """
  56. from ray.actor import ActorClass
  57. print("create func=", create_function_name, "class_name=", class_name)
  58. return ActorClass._ray_from_function_descriptor(
  59. Language.CPP,
  60. CppFunctionDescriptor(create_function_name, "PYTHON", class_name),
  61. {},
  62. )
  63. def _format_args(worker, args, kwargs):
  64. """Format args for various languages.
  65. Args:
  66. worker: The global worker instance.
  67. args: The arguments for cross language.
  68. kwargs: The keyword arguments for cross language.
  69. Returns:
  70. List of args and kwargs (if supported).
  71. """
  72. if not worker.load_code_from_local:
  73. raise ValueError(
  74. "Cross language feature needs --load-code-from-local to be set."
  75. )
  76. if kwargs:
  77. raise TypeError(
  78. f"Cross language remote functions does not support kwargs, "
  79. f"kwargs:{str(kwargs)}."
  80. )
  81. return args
  82. def _get_function_descriptor_for_actor_method(
  83. language: str, actor_creation_function_descriptor, method_name: str, signature: str
  84. ):
  85. """Get function descriptor for cross language actor method call.
  86. Args:
  87. language: Target language.
  88. actor_creation_function_descriptor:
  89. The function signature for actor creation.
  90. method_name: The name of actor method.
  91. signature: The signature for the actor method. When calling Java from Python,
  92. it should be string in the form of "{length_of_args}".
  93. Returns:
  94. Function descriptor for cross language actor method call.
  95. """
  96. if language == Language.JAVA:
  97. return JavaFunctionDescriptor(
  98. actor_creation_function_descriptor.class_name,
  99. method_name,
  100. signature,
  101. )
  102. elif language == Language.CPP:
  103. return CppFunctionDescriptor(
  104. method_name,
  105. "PYTHON",
  106. actor_creation_function_descriptor.class_name,
  107. )
  108. else:
  109. raise NotImplementedError(
  110. "Cross language remote actor method " f"not support language {language}"
  111. )