代码优化

This commit is contained in:
liujianjiang 2025-11-28 11:14:38 +08:00
parent 203b4ff697
commit fbf7ef1301
4 changed files with 68 additions and 11 deletions

42
gunicorn_conf.py Normal file
View File

@ -0,0 +1,42 @@
# -*- coding: utf-8 -*-
import multiprocessing
import os
# 服务器socket
bind = "0.0.0.0:8000"
# 工作进程数
workers = multiprocessing.cpu_count() * 2 + 1
# 工作进程类型
worker_class = "uvicorn.workers.UvicornWorker"
# 工作进程超时时间
timeout = 120
# 保持连接
keepalive = 5
# 最大请求数
max_requests = 1000
max_requests_jitter = 100
# 日志配置
accesslog = "-"
errorlog = "-"
loglevel = "info"
# 进程名称
proc_name = "fastapi_app"
# 工作模式
worker_tmp_dir = "/dev/shm"
# 环境变量
raw_env = ["PYTHONPATH=/main", "PYTHONUNBUFFERED=1"]
# 预加载应用
preload_app = True
# 优雅退出时间
graceful_timeout = 30

View File

@ -6,11 +6,12 @@ import uvicorn
from pathlib import Path
from typing import Dict, Any, Optional, List
from fastapi import FastAPI, HTTPException, Depends
from public_function.auth import verify_tk_token
from public_function.public_func import read_config, create_logger
from model.model import GoodsInfo, DataReceive, AccountCreate, AccountUpdate, DeviceResetData
app = FastAPI()
app.middleware("http")(verify_tk_token)
logger = create_logger(file_name="crawler_main")

View File

@ -5,24 +5,24 @@ from typing import Optional, Dict, Any
# 定义数据模型
class AccountCreate(BaseModel):
account_id: str = Field(..., min_length=1, max_length=128, description="账号ID")
password: str = Field(..., min_length=1, max_length=128, description="密码")
country: str = Field(..., min_length=1, max_length=128, description="账号所在国家")
app_name: str = Field(..., min_length=1, max_length=128, description="应用名称")
account_id: str = Field(..., description="账号ID")
password: str = Field(..., description="密码")
country: str = Field(..., description="账号所在国家")
app_name: str = Field(..., description="应用名称")
class AccountUpdate(BaseModel):
account_id: str = Field(..., description="账号ID")
app_name: str = Field(..., min_length=1, max_length=128, description="应用名称")
app_name: str = Field(..., description="应用名称")
status: int = Field(..., ge=1, le=10, description="状态1-空闲2-使用中3-暂停使用(后续还能使用)4-账号已无法使用")
class GoodsInfo(BaseModel):
country: str = Field(..., min_length=1, max_length=128, description="账号所在国家")
app_name: str = Field(..., min_length=1, max_length=128, description="应用名称")
goods_id: str = Field(..., min_length=1, max_length=128, description="商品ID")
store_id: str = Field(..., min_length=1, max_length=128, description="店铺ID")
is_re_crawl: str = Field(..., min_length=0, max_length=128, description="是否重新抓取")
country: str = Field(..., description="账号所在国家")
app_name: str = Field(..., description="应用名称")
goods_id: str = Field(..., description="商品ID")
store_id: str = Field(..., description="店铺ID")
is_re_crawl: bool = Field(..., description="是否重新抓取")
class DataReceive(BaseModel):

14
public_function/auth.py Normal file
View File

@ -0,0 +1,14 @@
from fastapi import Request
from fastapi.responses import JSONResponse
TOKEN = "opB4ztbdw45xFoJbXti20520bsEq3UDKKAtiDWHnGjjhP6v0KNFjqBM7bfzto6GLdUPviYnVdCgdCJYqe42nPoy6mvW59F3TPQZu"
async def verify_tk_token(request: Request, call_next):
"""鉴权中间件"""
token = request.headers.get("token")
if token != TOKEN:
return JSONResponse(status_code=401, content={"detail": "Unauthorized"})
return await call_next(request)