| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849 |
- """
- Generic model definitions for common utilities.
- These models represent generic concepts that can be used by both
- serve and batch components.
- """
- import asyncio
- import threading
- from functools import partial
- from typing import Awaitable, Callable, TypeVar
- T = TypeVar("T")
- # DiskMultiplexConfig removed - it's serve-specific and belongs in serve/configs/server_models.py
- class GlobalIdManager:
- """Thread-safe global ID manager for assigning unique IDs."""
- def __init__(self):
- self._counter = 0
- self._lock = threading.Lock()
- def next(self) -> int:
- """Get the next unique ID."""
- with self._lock:
- self._counter += 1
- return self._counter
- # Global instance
- global_id_manager = GlobalIdManager()
- def make_async(_func: Callable[..., T]) -> Callable[..., Awaitable[T]]:
- """Take a blocking function, and run it on in an executor thread.
- This function prevents the blocking function from blocking the asyncio event loop.
- The code in this function needs to be thread safe.
- """
- def _async_wrapper(*args, **kwargs) -> asyncio.Future:
- loop = asyncio.get_event_loop()
- func = partial(_func, *args, **kwargs)
- return loop.run_in_executor(executor=None, func=func)
- return _async_wrapper
|