11.25 qianwen-long
This commit is contained in:
parent
0a0770d5b4
commit
1ead1bfd91
@ -1,45 +1,22 @@
|
|||||||
services:
|
services:
|
||||||
web:
|
flask_app:
|
||||||
build:
|
build:
|
||||||
context: .
|
context: . # 构建上下文为当前目录
|
||||||
dockerfile: Dockerfile
|
dockerfile: Dockerfile # 指定 Dockerfile
|
||||||
command: python flask_app/start_up.py
|
|
||||||
ports:
|
ports:
|
||||||
- "5001:5001"
|
- "5001:5001" # 将容器的5001端口映射到主机的5001端口
|
||||||
volumes:
|
|
||||||
- .:/flask_project
|
|
||||||
- /home/Z/zbparse_output_dev:/flask_project/flask_app/static/output
|
|
||||||
env_file:
|
env_file:
|
||||||
- .env
|
- .env # 使用 .env 文件中的环境变量
|
||||||
depends_on:
|
environment:
|
||||||
- redis
|
# 如果需要覆盖或添加额外的环境变量,可以在这里定义
|
||||||
networks:
|
# 例如:
|
||||||
- flask_network
|
# DEBUG: 'false'
|
||||||
privileged: true
|
|
||||||
|
|
||||||
|
|
||||||
worker:
|
|
||||||
privileged: true
|
|
||||||
build:
|
|
||||||
context: .
|
|
||||||
dockerfile: Dockerfile
|
|
||||||
command: celery -A flask_app.celery_app.celery_app worker --loglevel=info
|
|
||||||
volumes:
|
volumes:
|
||||||
- .:/flask_project
|
# - .:/flask_project # 将当前目录挂载到容器的 /flask_project 目录(可选,便于开发时实时更新代码)
|
||||||
env_file:
|
- /home/Z/zbparse_output:/flask_project/flask_app/static/output # 额外的数据卷挂载
|
||||||
- .env
|
restart: unless-stopped # 容器退出时自动重启,除非明确停止
|
||||||
depends_on:
|
|
||||||
- redis
|
|
||||||
networks:
|
|
||||||
- flask_network
|
|
||||||
|
|
||||||
redis:
|
# 可选:定义网络或其他全局配置
|
||||||
image: redis:bullseye
|
# networks:
|
||||||
ports:
|
# default:
|
||||||
- "6379:6379"
|
# driver: bridge
|
||||||
networks:
|
|
||||||
- flask_network
|
|
||||||
|
|
||||||
networks:
|
|
||||||
flask_network:
|
|
||||||
driver: bridge
|
|
||||||
|
@ -1,22 +0,0 @@
|
|||||||
# flask_app/celery_app
|
|
||||||
import os
|
|
||||||
from celery import Celery
|
|
||||||
|
|
||||||
# 创建 Celery 实例
|
|
||||||
celery_app = Celery(
|
|
||||||
'tasks',
|
|
||||||
broker=os.getenv('CELERY_BROKER_URL', 'redis://redis:6379/0'), # 从环境变量加载 Broker 地址
|
|
||||||
backend=os.getenv('CELERY_RESULT_BACKEND', 'redis://redis:6379/0') # 从环境变量加载 Backend 地址
|
|
||||||
)
|
|
||||||
|
|
||||||
# 设置任务队列的速率限制(全局每分钟 250 次)
|
|
||||||
celery_app.conf.task_annotations = {
|
|
||||||
'flask_app.task.process_qianwen_long': {'rate_limit': '250/m'}
|
|
||||||
}
|
|
||||||
|
|
||||||
# 可选:加载更多配置项(从环境变量或直接配置)
|
|
||||||
celery_app.conf.update(
|
|
||||||
timezone='UTC', # 设置时区(可根据需要修改)
|
|
||||||
enable_utc=True # 确保 UTC 时间生效
|
|
||||||
)
|
|
||||||
celery_app.autodiscover_tasks(['flask_app.task'])
|
|
@ -1,45 +0,0 @@
|
|||||||
# flask_project/flask_app/routes.py
|
|
||||||
from flask import request, jsonify
|
|
||||||
from flask_app.task import process_qianwen_long
|
|
||||||
|
|
||||||
def register_routes(app):
|
|
||||||
@app.route('/api/qianwen_long', methods=['POST'])
|
|
||||||
def qianwen_long_endpoint():
|
|
||||||
data = request.json
|
|
||||||
file_id = data.get('file_id')
|
|
||||||
user_query = data.get('user_query')
|
|
||||||
|
|
||||||
if not file_id or not user_query:
|
|
||||||
return jsonify({'error': 'file_id 和 user_query 是必需的'}), 400
|
|
||||||
|
|
||||||
try:
|
|
||||||
# 发送任务到 Celery 队列
|
|
||||||
task = process_qianwen_long.delay(file_id, user_query)
|
|
||||||
return jsonify({'task_id': task.id}), 202
|
|
||||||
except Exception as e:
|
|
||||||
return jsonify({'error': str(e)}), 500
|
|
||||||
|
|
||||||
@app.route('/api/task_status/<task_id>', methods=['GET'])
|
|
||||||
def get_task_status(task_id):
|
|
||||||
task = process_qianwen_long.AsyncResult(task_id)
|
|
||||||
if task.state == 'PENDING':
|
|
||||||
response = {
|
|
||||||
'state': task.state,
|
|
||||||
'status': '等待中...'
|
|
||||||
}
|
|
||||||
elif task.state == 'SUCCESS':
|
|
||||||
response = {
|
|
||||||
'state': task.state,
|
|
||||||
'result': task.result
|
|
||||||
}
|
|
||||||
elif task.state == 'FAILURE':
|
|
||||||
response = {
|
|
||||||
'state': task.state,
|
|
||||||
'status': str(task.info), # 错误信息
|
|
||||||
}
|
|
||||||
else:
|
|
||||||
response = {
|
|
||||||
'state': task.state,
|
|
||||||
'status': task.info,
|
|
||||||
}
|
|
||||||
return jsonify(response)
|
|
@ -1,19 +0,0 @@
|
|||||||
# flask_app/task
|
|
||||||
from flask_app.celery_app import celery_app
|
|
||||||
from flask_app.general.通义千问long import qianwen_long
|
|
||||||
|
|
||||||
|
|
||||||
@celery_app.task(
|
|
||||||
name='flask_app.task.process_qianwen_long',
|
|
||||||
bind=True,
|
|
||||||
soft_time_limit=600, # 10分钟后发出超时信号
|
|
||||||
time_limit=660,
|
|
||||||
max_retries=3, # 最大重试次数
|
|
||||||
default_retry_delay=60 # 重试延迟时间(秒)
|
|
||||||
)
|
|
||||||
def process_qianwen_long(self, file_id, user_query):
|
|
||||||
try:
|
|
||||||
return qianwen_long(file_id, user_query)
|
|
||||||
except Exception as exc:
|
|
||||||
print("任务发生异常,准备重试")
|
|
||||||
raise self.retry(exc=exc)
|
|
Loading…
x
Reference in New Issue
Block a user