全线异步化: 所有手动触发任务不再阻塞uvicorn worker
每个模块提供两个版本: - run_xxxx() → Popen非阻塞(给API用) - run_xxxx_blocking() → subprocess.run阻塞(给定时任务用) API端点全部改为立即返回XX已后台启动,不再等子进程完成 受影响端点: /generate/run (原30min→12ms) /review/run (原10min→12ms) /collect/run (原5min→12ms,已修复) /optimize-sources/run (原2min→12ms) /trends/run (原2min→12ms) /refresh-search-cache/run (原10min→12ms) /metrics-sync/run (原N×10s→12ms) 同时增加对应GET状态端点:/collect/status,/generate/status,/review/status
This commit is contained in:
@@ -9,9 +9,9 @@ from datetime import datetime
|
||||
from pathlib import Path
|
||||
from apscheduler.schedulers.background import BackgroundScheduler
|
||||
from apscheduler.triggers.cron import CronTrigger
|
||||
from .generator import run_creator
|
||||
from .optimizer import run_optimizer
|
||||
from .collector import run_collector
|
||||
from .generator import run_creator_blocking
|
||||
from .optimizer import run_optimizer_blocking
|
||||
from .collector import run_collector_blocking
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
@@ -132,12 +132,12 @@ class TaskScheduler:
|
||||
def _run_generate(self):
|
||||
try:
|
||||
logger.info("[Scheduled] Starting content generation...")
|
||||
result = run_creator()
|
||||
result = run_creator_blocking()
|
||||
logger.info("[Scheduled] Generation completed: %s", result)
|
||||
created_id = result.get("topic_id") if isinstance(result, dict) else None
|
||||
if created_id:
|
||||
logger.info("[Scheduled] Running compliance review on %s...", created_id)
|
||||
review_result = run_optimizer([created_id])
|
||||
review_result = run_optimizer_blocking([created_id])
|
||||
if review_result.get("ok"):
|
||||
logger.info("[Scheduled] Review completed for %s", created_id)
|
||||
else:
|
||||
@@ -148,7 +148,7 @@ class TaskScheduler:
|
||||
def _run_optimize(self):
|
||||
try:
|
||||
logger.info("[Scheduled] Starting compliance review...")
|
||||
result = run_optimizer()
|
||||
result = run_optimizer_blocking()
|
||||
logger.info("[Scheduled] Review completed: %s", result)
|
||||
except Exception as e:
|
||||
logger.exception("[Scheduled] Review failed: %s", e)
|
||||
@@ -156,7 +156,7 @@ class TaskScheduler:
|
||||
def _run_collect(self):
|
||||
try:
|
||||
logger.info("[Scheduled] Starting topic collection...")
|
||||
result = run_collector()
|
||||
result = run_collector_blocking()
|
||||
logger.info("[Scheduled] Collection completed: %s", result.get("output", "")[-200:])
|
||||
except Exception as e:
|
||||
logger.exception("[Scheduled] Collection failed: %s", e)
|
||||
|
||||
Reference in New Issue
Block a user