Buckets:
MisterAI/LocalAI_Demo_backends / cpu-pocket-tts.upgrade-tmp /venv /lib /python3.10 /site-packages /fastapi /concurrency.py
| from collections.abc import AsyncGenerator | |
| from contextlib import AbstractContextManager | |
| from contextlib import asynccontextmanager as asynccontextmanager | |
| from typing import TypeVar | |
| import anyio.to_thread | |
| from anyio import CapacityLimiter | |
| from starlette.concurrency import iterate_in_threadpool as iterate_in_threadpool # noqa | |
| from starlette.concurrency import run_in_threadpool as run_in_threadpool # noqa | |
| from starlette.concurrency import ( # noqa | |
| run_until_first_complete as run_until_first_complete, | |
| ) | |
| _T = TypeVar("_T") | |
| async def contextmanager_in_threadpool( | |
| cm: AbstractContextManager[_T], | |
| ) -> AsyncGenerator[_T, None]: | |
| # blocking __exit__ from running waiting on a free thread | |
| # can create race conditions/deadlocks if the context manager itself | |
| # has its own internal pool (e.g. a database connection pool) | |
| # to avoid this we let __exit__ run without a capacity limit | |
| # since we're creating a new limiter for each call, any non-zero limit | |
| # works (1 is arbitrary) | |
| exit_limiter = CapacityLimiter(1) | |
| try: | |
| yield await run_in_threadpool(cm.__enter__) | |
| except Exception as e: | |
| ok = bool( | |
| await anyio.to_thread.run_sync( | |
| cm.__exit__, type(e), e, e.__traceback__, limiter=exit_limiter | |
| ) | |
| ) | |
| if not ok: | |
| raise e | |
| else: | |
| await anyio.to_thread.run_sync( | |
| cm.__exit__, None, None, None, limiter=exit_limiter | |
| ) | |
Xet Storage Details
- Size:
- 1.49 kB
- Xet hash:
- 1d5e1e0da1198ea8d5933f598f3a5cf86bd4661313f94520615ec4f68c08ef00
·
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.