93 lines
2.7 KiB
Python
93 lines
2.7 KiB
Python
from flask import Flask, request, jsonify
|
|
from loguru import logger
|
|
from concurrent.futures import ThreadPoolExecutor
|
|
import uuid
|
|
import threading
|
|
import time
|
|
|
|
from 本田注入 import Acb # 你的自定义模块
|
|
|
|
app = Flask(__name__)
|
|
|
|
# ========== 线程池与任务存储 ==========
|
|
executor = ThreadPoolExecutor(max_workers=5) # 最多同时执行5个任务
|
|
tasks = {} # 存储任务状态 {task_id: {"status": "pending"/"running"/"success"/"error", "message": "..."}}
|
|
lock = threading.Lock() # 防止多线程修改冲突
|
|
|
|
|
|
# ========== 异步任务函数 ==========
|
|
def run_acb_task(task_id, data):
|
|
"""后台执行的 ACB 任务"""
|
|
try:
|
|
with lock:
|
|
tasks[task_id]["status"] = "running"
|
|
tasks[task_id]["message"] = "任务正在执行中"
|
|
|
|
acb_instance = Acb(a=data)
|
|
result = acb_instance.action() # 执行核心逻辑
|
|
|
|
with lock:
|
|
tasks[task_id]["status"] = "success"
|
|
tasks[task_id]["message"] = "注入成功"
|
|
tasks[task_id]["result"] = result
|
|
|
|
except Exception as e:
|
|
logger.exception("任务执行出错")
|
|
with lock:
|
|
tasks[task_id]["status"] = "error"
|
|
tasks[task_id]["message"] = str(e)
|
|
|
|
|
|
# ========== 路由部分 ==========
|
|
|
|
@app.route("/acb", methods=["POST"])
|
|
def create_task():
|
|
"""创建新任务"""
|
|
try:
|
|
data = request.get_json(force=True)
|
|
if not data:
|
|
return jsonify({"status": "error", "message": "请求体为空或格式错误"}), 400
|
|
|
|
# 生成任务 ID
|
|
task_id = str(uuid.uuid4())
|
|
|
|
# 初始化任务状态
|
|
with lock:
|
|
tasks[task_id] = {"status": "pending", "message": "任务已提交,等待执行"}
|
|
|
|
# 提交后台执行
|
|
executor.submit(run_acb_task, task_id, data)
|
|
|
|
return jsonify({"status": "true", "task_id": task_id, "message": "任务已创建"}), 200
|
|
|
|
except Exception as e:
|
|
logger.exception("创建任务出错")
|
|
return jsonify({"status": "error", "message": str(e)}), 500
|
|
|
|
|
|
@app.route("/acb/status/<task_id>", methods=["GET"])
|
|
def check_task_status(task_id):
|
|
"""查询任务执行状态"""
|
|
with lock:
|
|
task_info = tasks.get(task_id)
|
|
|
|
if not task_info:
|
|
return jsonify({"status": "error", "message": "任务ID不存在"}), 404
|
|
|
|
return jsonify({
|
|
"status": task_info["status"],
|
|
"message": task_info["message"],
|
|
"result": task_info.get("result")
|
|
})
|
|
|
|
|
|
# ========== 启动服务 ==========
|
|
if __name__ == "__main__":
|
|
try:
|
|
acb = Acb()
|
|
acb.take_over_browser()
|
|
except Exception as e:
|
|
logger.warning(f"初始化浏览器控制失败: {e}")
|
|
|
|
app.run(host="0.0.0.0", port=5000, debug=False)
|