| import multiprocessing
|
| import logging
|
| import uvicorn
|
|
|
| from consumer import run_consumer
|
| from redis_config import QUEUE_RAG_QDRANT, QUEUE_RAG_NEO4J, QUEUE_MEMORY
|
|
|
| import sys
|
| from pathlib import Path
|
|
|
|
|
| logger = logging.getLogger(__name__)
|
| ROOT_DIR = Path(__file__).parent.parent
|
| sys.path.append(str(ROOT_DIR))
|
|
|
| logging.basicConfig(
|
| level=logging.INFO,
|
| format="%(asctime)s - %(name)s - %(levelname)s - %(message)s"
|
| )
|
|
|
|
|
| def run_api():
|
| uvicorn.run(
|
| "backend_app.main:app",
|
| host="0.0.0.0",
|
| port=8000,
|
| workers=1
|
| )
|
|
|
|
|
| def start_consumers(queue_name, count=1):
|
| """
|
| 启动同一个队列的多个消费者进程
|
| :param queue_name: 队列名
|
| :param count: 启动几个消费者
|
| :return: 进程列表
|
| """
|
| processes = []
|
| for i in range(count):
|
| p = multiprocessing.Process(
|
| target=run_consumer,
|
| args=(queue_name,),
|
| name=f"Consumer-{queue_name}-{i+1}"
|
| )
|
| p.start()
|
| processes.append(p)
|
| logging.info(f"✅ 启动消费者:{p.name}")
|
| return processes
|
|
|
|
|
| if __name__ == "__main__":
|
|
|
| p_api = multiprocessing.Process(target=run_api, name="API-Server")
|
| p_api.start()
|
|
|
|
|
| all_processes = []
|
|
|
|
|
| qdrant_procs = start_consumers(QUEUE_RAG_QDRANT, 1)
|
| all_processes.extend(qdrant_procs)
|
|
|
|
|
| neo4j_procs = start_consumers(QUEUE_RAG_NEO4J, 1)
|
| all_processes.extend(neo4j_procs)
|
|
|
|
|
| memory_procs = start_consumers(QUEUE_MEMORY, 1)
|
| all_processes.extend(memory_procs)
|
|
|
|
|
| p_api.join()
|
| for p in all_processes:
|
| p.join() |