Files
2026-07-13 13:17:40 +08:00

68 lines
2.3 KiB
Cython

from asyncio import Future
import concurrent.futures
from libcpp.vector cimport vector as c_vector
from libcpp.string cimport string as c_string
from libc.stdint cimport int32_t
from libcpp.utility cimport move
from libcpp.memory cimport unique_ptr, make_unique, shared_ptr
from ray.includes.common cimport (
CRayletClientWithIoContext,
CRayStatus,
CAddress,
OptionalItemPyCallback,
)
from ray.includes.optional cimport optional
cdef convert_optional_vector_int32(
CRayStatus status, optional[c_vector[int32_t]] vec) with gil:
try:
check_status_timeout_as_rpc_error(status)
assert vec.has_value()
return move(vec.value()), None
except Exception as e:
return None, e
cdef class RayletClient:
cdef:
unique_ptr[CRayletClientWithIoContext] inner
def __cinit__(self, ip_address: str, port: int):
cdef:
c_string c_ip_address
int32_t c_port
c_ip_address = ip_address.encode('utf-8')
c_port = <int32_t>port
self.inner = make_unique[CRayletClientWithIoContext](c_ip_address, c_port)
def async_get_worker_pids(self, timeout_ms: int = 1000) -> Future[list[int]]:
"""Get the PIDs of all workers registered with the raylet."""
cdef:
fut = incremented_fut()
int32_t timeout = <int32_t>timeout_ms
assert self.inner.get() is not NULL
with nogil:
self.inner.get().GetWorkerPIDs(
OptionalItemPyCallback[c_vector[int32_t]](
&convert_optional_vector_int32,
assign_and_decrement_fut,
fut),
timeout)
return asyncio.wrap_future(fut)
def async_get_agent_pids(self, timeout_ms: int = 1000) -> Future[list[int]]:
"""Get the PIDs of dashboard and runtime_env agent."""
cdef:
fut = incremented_fut()
int32_t timeout = <int32_t>timeout_ms
assert self.inner.get() is not NULL
with nogil:
self.inner.get().GetAgentPIDs(
OptionalItemPyCallback[c_vector[int32_t]](
&convert_optional_vector_int32,
assign_and_decrement_fut,
fut),
timeout)
return asyncio.wrap_future(fut)