fix: admin auth UX, password policy, deps, db pool
This commit is contained in:
@@ -7,8 +7,26 @@ import threading
|
||||
import queue
|
||||
import time
|
||||
from typing import Callable, Optional, Dict, Any
|
||||
import nest_asyncio
|
||||
nest_asyncio.apply()
|
||||
import nest_asyncio
|
||||
|
||||
_NEST_ASYNCIO_APPLIED = False
|
||||
_NEST_ASYNCIO_LOCK = threading.Lock()
|
||||
|
||||
|
||||
def _apply_nest_asyncio_once() -> None:
|
||||
"""按需应用 nest_asyncio,避免 import 时产生全局副作用。"""
|
||||
global _NEST_ASYNCIO_APPLIED
|
||||
|
||||
if _NEST_ASYNCIO_APPLIED:
|
||||
return
|
||||
with _NEST_ASYNCIO_LOCK:
|
||||
if _NEST_ASYNCIO_APPLIED:
|
||||
return
|
||||
try:
|
||||
nest_asyncio.apply()
|
||||
except Exception:
|
||||
pass
|
||||
_NEST_ASYNCIO_APPLIED = True
|
||||
|
||||
# 安全修复: 将魔法数字提取为可配置常量
|
||||
BROWSER_IDLE_TIMEOUT = int(os.environ.get('BROWSER_IDLE_TIMEOUT', '300')) # 空闲超时(秒),默认5分钟
|
||||
@@ -204,13 +222,15 @@ class BrowserWorkerPool:
|
||||
else:
|
||||
print(f"[浏览器池] {message}")
|
||||
|
||||
def initialize(self):
|
||||
"""初始化工作线程池(按需模式,启动时不创建浏览器)"""
|
||||
with self.lock:
|
||||
if self.initialized:
|
||||
return
|
||||
|
||||
self.log(f"正在初始化工作线程池({self.pool_size}个worker,按需启动浏览器)...")
|
||||
def initialize(self):
|
||||
"""初始化工作线程池(按需模式,启动时不创建浏览器)"""
|
||||
with self.lock:
|
||||
if self.initialized:
|
||||
return
|
||||
|
||||
_apply_nest_asyncio_once()
|
||||
|
||||
self.log(f"正在初始化工作线程池({self.pool_size}个worker,按需启动浏览器)...")
|
||||
|
||||
for i in range(self.pool_size):
|
||||
worker = BrowserWorker(
|
||||
|
||||
Reference in New Issue
Block a user