Co-Authored-By: Classic298 <27028174+Classic298@users.noreply.github.com>
This commit is contained in:
Timothy Jaeryang Baek
2026-08-17 00:47:32 -07:00
parent ba0c4b3932
commit 4ec6ee1441
2 changed files with 13 additions and 4 deletions
+1
View File
@@ -2097,6 +2097,7 @@ ENABLE_USER_WEBHOOKS = os.getenv('ENABLE_USER_WEBHOOKS', 'False').lower() == 'tr
# FastAPI / AnyIO settings
THREAD_POOL_SIZE = os.getenv('THREAD_POOL_SIZE', None)
THREAD_POOL_THREAD_NAME_PREFIX = os.getenv('THREAD_POOL_THREAD_NAME_PREFIX', '')
if THREAD_POOL_SIZE is not None and isinstance(THREAD_POOL_SIZE, str):
try:
+12 -4
View File
@@ -7,6 +7,7 @@ import mimetypes
import os
import sys
import time
from concurrent.futures import ThreadPoolExecutor
from contextlib import asynccontextmanager
from uuid import uuid4
@@ -64,6 +65,7 @@ from open_webui.config import (
ONEDRIVE_SHAREPOINT_URL,
STATIC_DIR,
THREAD_POOL_SIZE,
THREAD_POOL_THREAD_NAME_PREFIX,
WEBUI_AUTH,
WEBUI_NAME,
async_reset_config,
@@ -343,6 +345,16 @@ async def lifespan(app: FastAPI):
# This allows sync functions to schedule work on the main loop without blocking health checks
app.state.main_loop = asyncio.get_running_loop()
if THREAD_POOL_SIZE and THREAD_POOL_SIZE > 0:
# asyncio offloads bypass AnyIO's limiter, so configure both before the first offload.
anyio.to_thread.current_default_thread_limiter().total_tokens = THREAD_POOL_SIZE
app.state.main_loop.set_default_executor(
ThreadPoolExecutor(
max_workers=THREAD_POOL_SIZE,
thread_name_prefix=THREAD_POOL_THREAD_NAME_PREFIX,
)
)
app.state.instance_id = INSTANCE_ID
start_logger()
@@ -378,10 +390,6 @@ 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))
if THREAD_POOL_SIZE and THREAD_POOL_SIZE > 0:
limiter = anyio.to_thread.current_default_thread_limiter()
limiter.total_tokens = THREAD_POOL_SIZE
app.state.periodic_usage_pool_cleanup = asyncio.create_task(periodic_usage_pool_cleanup())
app.state.periodic_session_pool_cleanup = asyncio.create_task(periodic_session_pool_cleanup())