enh: Set the default executor for asyncio based on THREAD_POOL_SIZE

This commit is contained in:
EntropyYue 2026-03-27 23:12:13 +08:00
parent 66c9bf57da
commit 066adb3fc9

View file

@ -9,6 +9,7 @@ import sys
import time
import random
import re
from concurrent.futures import ThreadPoolExecutor
from uuid import uuid4
@ -641,10 +642,15 @@ async def lifespan(app: FastAPI):
if app.state.redis is not None:
app.state.redis_task_command_listener = asyncio.create_task(redis_task_command_listener(app))
executor = None
if THREAD_POOL_SIZE and THREAD_POOL_SIZE > 0:
limiter = anyio.to_thread.current_default_thread_limiter()
limiter.total_tokens = THREAD_POOL_SIZE
executor = ThreadPoolExecutor(max_workers=THREAD_POOL_SIZE)
app.state.main_loop.set_default_executor(executor)
asyncio.create_task(periodic_usage_pool_cleanup())
asyncio.create_task(periodic_session_pool_cleanup())
@ -704,6 +710,9 @@ async def lifespan(app: FastAPI):
yield
if executor is not None:
executor.shutdown()
if hasattr(app.state, 'redis_task_command_listener'):
app.state.redis_task_command_listener.cancel()