settings.py

1. 概览

这是一个典型的“配置/常量”文件(settings-like),包含:并发/超时参数、网络 API 地址、异步 HTTP session 参数、OBS(对象存储)上传下载凭证、文件夹路径、时区、图像处理相关阈值、华为云 IAM 认证信息、模型服务 URL、以及若干硬编码 token/secret。大多数值优先从环境变量读取(os.getenv),否则使用硬编码默认值。


2. 详细解析

import pytz
import os
  • 导入 pytz 用于时区处理;导入 os 以访问环境变量和文件/目录操作。

2.1 主进程控制

MAX_CONCURRENT = int(os.getenv("MAX_CONCURRENT", 5)) 
PROCESS_TIMEOUT = int(os.getenv("PROCESS_TIMEOUT", 2400))
PROCESS_CLEAN_TIME = int(os.getenv("PROCESS_CLEAN_TIME", 60))
  • MAX_CONCURRENT:允许同时检测/运行的“列车”数量(即并行进程数)。默认 5。通过 os.getenv 读取字符串后用 int() 转换。若环境变量是非整数字符串,会抛出 ValueError(没有捕获)。
    • os.getenv() 用来获取环境变量的值。如果环境变量不存在,可以返回一个默认值。
  • PROCESS_TIMEOUT:每个子进程的超时时间(秒),默认 2400 秒(40 分钟)。
  • PROCESS_CLEAN_TIME:多久(秒)检查一次并清理已完成的子进程,默认 60 秒。

2.2 并发控制(图片推理相关)

MAX_CONCURRENT_IMG_PROCESS = int(os.getenv("MAX_CONCURRENT_IMG_PROCESS", 5))
MAX_THREAD_WORKS = MAX_CONCURRENT_IMG_PROCESS + 2
  • MAX_CONCURRENT_IMG_PROCESS:图片推理时最大并发数(并发请求/任务数)。默认 5。
  • MAX_THREAD_WORKS:线程池中线程数,取并发数 + 2。注释解释:图片 IO 较多,线程数略大于并发数能提高吞吐。计算是即时的,随环境变量改变而改变。

2.3 网络参数(外部服务接口地址)

API_GET_CONFIDENCE_TABLE = str(os.getenv("API_GET_CONFIDENCE_TABLE", 'http://127.0.0.1:19010/internal/v1/confidence-level-configs'))
API_GET_CONFIDENCE_TABLE_NEW = str(os.getenv("API_GET_CONFIDENCE_TABLE_NEW", 'http://127.0.0.1:19010/internal/v2/confidence-level-configs'))
API_REPORT_TO_JAVA = str(os.getenv("API_REPORT_TO_JAVA", 'http://127.0.0.1:19010/internal/v1/fault-images/report'))
API_REPORT_TO_JAVA_NORMAL = str(os.getenv("API_REPORT_TO_JAVA_NORMAL", 'http://127.0.0.1:19010/internal/v1/tasks/update-task-status'))
API_REPORT_TO_DINGHAN = str(os.getenv("API_REPORT_TO_DINGHAN", "https://192.168.238.230:8082/v1/detection"))
DINGHAN_REPORT_KEY = "WEpMQ0xEWEpMACEkAAB+AAAAAAA="
  • 这些是不同后端/服务的 HTTP(s) endpoint:
    • API_GET_CONFIDENCE_TABLE :从JAVA那里获取各类故障的置信度的接口。
    • API_GET_CONFIDENCE_TABLE_NEW:从JAVA那里获取各类故障的置信度的接口,但是有车号信息。
    • API_REPORT_TO_JAVA:发送故障信息给JAVA的接口。
    • API_REPORT_TO_JAVA_NORMAL:当没有故障的时候使用这个接口。
    • API_REPORT_TO_DINGHAN:发送故障信息给鼎汉的接口(https://192...)。
  • DINGHAN_REPORT_KEY:和鼎汉对接时使用的 key(此处硬编码在代码中)。注释中提到证书文件放在 main.py 同级。警告:该 key 不应在源码中硬编码

2.4 异步推理 session 参数(aiohttp / 异步HTTP客户端相关)

AIO_CONNECTOR_LIMIT = int(os.getenv("AIO_CONNECTOR_LIMIT", 50))
AIO_CONNECTOR_LIMIT_PER_HOST = MAX_CONCURRENT_IMG_PROCESS + 2
AIO_TIMEOUT_TOTAL = int(os.getenv("AIO_TIMEOUT_TOTAL", 1800))
AIO_TIMEOUT_CONNECT = int(os.getenv("AIO_TIMEOUT_CONNECT", 1200))
AIO_TIMEOUT_SOCKREAD = int(os.getenv("AIO_TIMEOUT_SOCKREAD", 1200))
AIO_TIMEOUT_SOCKCONNECT = int(os.getenv("AIO_TIMEOUT_SOCKCONNECT", 1200))
AIO_BUFSIZE = int(os.getenv("AIO_BUFSIZE", 131072))
  • AIO_CONNECTOR_LIMIT:(异步输入输出)全局最大并发连接数(通常对应 aiohttp.TCPConnector(limit=...))。
  • AIO_CONNECTOR_LIMIT_PER_HOST:对每个 host 的最大连接数(用 MAX_CONCURRENT_IMG_PROCESS + 2)。
  • 超时相关:
    • AIO_TIMEOUT_TOTAL:整个请求从发起到接收完响应的总超时(秒)。
    • AIO_TIMEOUT_CONNECT:连接建立超时(秒)。
    • AIO_TIMEOUT_SOCKREAD:读取超时 — 单次从 socket 接收数据包的等待间隔。
    • AIO_TIMEOUT_SOCKCONNECT:TCP+SSL 握手连接超时(用于缓解网络波动)。
  • AIO_BUFSIZE:I/O 缓冲区大小(字节),默认 131072(128 KB)。

这些参数用于创建异步 HTTP 客户端时的 timeout/connector 配置,目的是为了在网络不稳定或延迟高时更鲁棒地控制行为。

2.5 OBS(对象存储)上传与下载凭证与设置

DOWNLOAD_AK ="FTBXK1FKH9E4HGE1J9JK"
DOWNLOAD_SK ="Z48zFX7DavSYNXDrCTHLRi6YlNUjFnyOmxiQU95C"
DOWNLOAD_SERVER ="https://obsv3.dt-bj-1.bjdt.com"
DOWNLOAD_BUCKET_NAME = "jt-zw"
DOWNLOAD_LOCAL_DIR = "./temp_data/obs_download"

UPLOAD_AK ="F7NCC7XVFYVQ80QCAPSB"
UPLOAD_SK ="2YFw482sLCNMoSNEW9thZumQbuQ2oGWaNgHm6Mjj"
UPLOAD_SERVER ="https://obsv3.dt-bj-1.bjdt.com"
UPLOAD_BUCKET_NAME ="jt-wx"
UPLOAD_IMAGE_EXTENSION =".jpg"
UPLOAD_OBS_DIR ="aizt/OBCompany4/M15/Picture/fault/xiangjiangbeilu_OCRserver"
  • *_AK/*_SK:访问密钥(Access Key)与密钥(Secret Key),分别用于下载和上传。这些属于高度敏感凭证,绝对不应硬编码在仓库或公开代码里。
  • *_SERVER:OBS 服务 endpoint(HTTPS)。
  • *_BUCKET_NAME:指定桶名称。
  • DOWNLOAD_LOCAL_DIR:本地下载临时目录。
  • UPLOAD_IMAGE_EXTENSION:上传图片扩展名(.jpg)。
  • UPLOAD_OBS_DIR:OBS 上存储的路径(目录)。

2.6 其他设置(图像、时间、阈值等)

TIME_ZONE = pytz.timezone('Asia/Shanghai')
MAX_IMAGE_PIXELS =int(os.getenv("MAX_IMAGE_PIXELS",  26214500))
IMG_COMPRESS_RATIO = min(max(int(os.getenv("IMG_COMPRESS_RATIO", 55)), 10), 100)
DELETE_TIME_CYCLE = int(os.getenv("DELETE_TIME_CYCLE", 7))
CONFIDENCE_DEFAULT = float(os.getenv("CONFIDENCE_DEFAULT", 0.55))
X_APPROXIMATE_THRESHOLD = int(os.getenv("X_APPROXIMATE_THRESHOLD", 100))
  • TIME_ZONE:用 pytz 设置时区为 'Asia/Shanghai'(中国标准时间)。在后续时间处理(日志、时间戳)中应使用该时区。
  • MAX_IMAGE_PIXELS:Pillow 的像素上限,用于避免 DecompressionBombError(当图片像素超大时 PIL 会认为可能是攻击)。默认约 26,214,500 像素(即约 26M)。
  • IMG_COMPRESS_RATIO:JPEG 压缩比率,取环境变量后并用 min(max(..., 10), 100) 限制在 10~100 范围内;默认 55。备注:JPEG 压缩率的“真实效果”并非线性(注释已说明)。
  • DELETE_TIME_CYCLE:保留图片的天数(多少天前的图片会被删除),默认 7 天。
  • CONFIDENCE_DEFAULT:模型分类置信度默认阈值(当无法获取实时置信度配置时使用),默认 0.55(float)。
  • X_APPROXIMATE_THRESHOLD:以 X 坐标判断两个检测是否为同一部件的阈值(像素),默认 100。

2.7 需要用到的文件夹(本地)

ERROR_IMG_DIR = "./temp_data/error"
DINGHAN_IMG_DIR = "./data"
LOG_SAVE_DIR = "./logs"

os.makedirs(DOWNLOAD_LOCAL_DIR, exist_ok=True)
os.makedirs(ERROR_IMG_DIR, exist_ok=True)
os.makedirs(DINGHAN_IMG_DIR, exist_ok=True)
os.makedirs(LOG_SAVE_DIR, exist_ok=True)
  • 常见路径:ERROR_IMG_DIR(临时故障图),DINGHAN_IMG_DIR(给鼎汉保存的图片),LOG_SAVE_DIR(日志目录)。
  • os.makedirs(..., exist_ok=True):确保这些目录存在;如果已存在则不抛异常。

2.8 华为云 IAM Token 相关

TOKEN_URL = os.getenv("TOKEN_URL", "https://iam-apigateway-proxy.dt-bj-1.bjdt.com/v3/auth/tokens")
AUTH_INFO = {
    "auth": {
        "identity": {
            "methods": ["password"],
            "password": {
                "user": {
                    "name": "ai_360deploy",
                    "password": "!QAZ@WSX3edc4rfv",
                    "domain": {"name": "BJDT_AI"}
                }
            }
        },
        "scope": {"project": {"name": "dt-bj-1_AI_Project"}}
    }
}
  • TOKEN_URL:获取 IAM token 的 URL(默认值)。
  • AUTH_INFO:HTTP 请求体,用于基于用户名/密码获取 token(这里直接写了用户名/密码和租户信息)。同样属于敏感信息,不应硬编码到源码中。

2.9 模型推理的 IMAGE_TOKEN(由镜像 esn 生成)

IMAGE_TOKEN = """...很长的 base64 / json ..."""
  • 这是一个多行的长字符串 token(多处 ...)。通常用于调用模型推理服务或授权模型服务器。同样属于敏感凭证

2.10 模型推理服务 URL 列表

SERVICE_URL = [
    "https://192.168.239.174:8001/v1/infers/2ab0f4b9-2f7a-4f20-8f84-c560f8b87642/v1/abc/subway-detect",
]
  • 列表里可包含多个模型推理 endpoint(注释掉了一些备选项)。你的代码可以轮询或重试这些地址以实现容错或灰度替换。

posted @ 2026-01-05 08:53  做梦当财神  阅读(5)  评论(0)    收藏  举报