Files
ray-project--ray/python/ray/serve/tests/test_config_files/pid.py
T
2026-07-13 13:17:40 +08:00

79 lines
2.1 KiB
Python

import asyncio
import os
import time
from ray import serve
@serve.deployment
class f:
def __init__(self, async_wait: bool = False):
# whether to use wait() (busy spin) or async_wait() (busy spin
# while yielding event loop)
self._async = async_wait
# to be updated through reconfigure()
self.name = "default_name"
# used to block calls to __call__()
self.ready = True
# used to check how many times __call__() has been called
self.counter = 0
# used to block calls to health_check()
self.health_check_ready = True
# used to check how many times health_check() has been called
self.health_check_counter = 0
async def get_counter(self, health_check=False) -> int:
if health_check:
return self.health_check_counter
else:
return self.counter
def send(self, clear=False, health_check=False):
if health_check:
self.health_check_ready = not clear
else:
self.ready = not clear
def wait(self, _health_check=False):
if _health_check:
while not self.health_check_ready:
time.sleep(0.1)
else:
while not self.ready:
time.sleep(0.1)
async def async_wait(self, _health_check=False):
if _health_check:
while not self.health_check_ready:
await asyncio.sleep(0.1)
else:
while not self.ready:
await asyncio.sleep(0.1)
def reconfigure(self, config: dict):
self.name = config.get("name", "default_name")
async def __call__(self):
self.counter += 1
if self._async:
await self.async_wait()
else:
self.wait()
return os.getpid(), self.name
async def check_health(self):
self.health_check_counter += 1
if self._async:
await self.async_wait(_health_check=True)
else:
self.wait(_health_check=True)
node = f.bind()
dup_node = f.bind()
async_node = f.bind(async_wait=True)