Files
tw/utils/image_queue.py
ZuoWei a6c42d505a feat: 完整功能部署 v1.0
新增功能:
- 天网协作系统 (HTTP API 端口 6060)
- 三种工作流 (查找图片/处理图片/转人工派单)
- 图片任务数据库 (支持客户后续增加需求)
- 图绘派单系统集成 (API: 8005)
- 文字检测与加价 (60-80 元高价值订单)
- 风险评估与接单判断
- 作图失败自动转人工

新增文档:
- 项目功能汇总.md
- 三种工作流功能说明.md
- 文字加价功能说明.md
- 风险评估功能说明.md
- 图片任务数据库功能说明.md
- 图绘派单系统集成说明.md
- 作图失败转接人工说明.md
- DEPLOYMENT.md
- TIANWANG_INTEGRATION.md

核心修改:
- core/pydantic_ai_agent.py
- core/workflow.py
- core/websocket_client.py
- image/image_analyzer.py
- services/service_tuhui_dispatch.py
- db/image_tasks_db.py

版本:v1.0
日期:2026-02-28
2026-02-28 11:20:40 +08:00

56 lines
1.4 KiB
Python
Executable File

# -*- coding: utf-8 -*-
"""
图片处理队列 - 高并发时排队,避免打满 API
"""
import asyncio
import logging
from typing import Any, Dict, Optional
logger = logging.getLogger(__name__)
# 信号量限制并发数
_semaphore: Optional[asyncio.Semaphore] = None
_queue_size = 0
_max_concurrent = 2
_max_queue = 20
def init(max_concurrent: int = None, max_queue: int = None):
"""初始化队列(在 workflow 使用前调用)"""
global _semaphore, _max_concurrent, _max_queue
try:
from config.config import IMAGE_QUEUE_MAX_CONCURRENT, IMAGE_QUEUE_MAX_SIZE
_max_concurrent = max_concurrent or IMAGE_QUEUE_MAX_CONCURRENT
_max_queue = max_queue or IMAGE_QUEUE_MAX_SIZE
except Exception:
_max_concurrent = max_concurrent or 2
_max_queue = max_queue or 20
_semaphore = asyncio.Semaphore(_max_concurrent)
async def acquire():
"""获取处理槽位,队列满时等待"""
global _queue_size
if _semaphore is None:
init()
if _queue_size >= _max_queue:
logger.warning(f"[图片队列] 队列已满({_queue_size}),等待空位...")
_queue_size += 1
await _semaphore.acquire()
_queue_size -= 1
def release():
"""释放槽位"""
if _semaphore:
_semaphore.release()
async def run_with_queue(coro):
"""在队列中执行协程"""
await acquire()
try:
return await coro
finally:
release()