You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python3检测域名下多个端点是否存在的最高效实现方法

端点存活检测的Python实现优化

你提出的三个优化方向正误判断

    1. 使用多线程替代串行逐个发起请求:正确
      这类站点检测属于典型的IO密集型任务,大部分时间都在等待网络响应,串行执行会浪费大量CPU等待时间。换成多线程/协程并发请求可以把QPS提升几十到上百倍,注意控制并发数(建议50-200之间,根据目标服务器承受能力调整),避免触发目标站点的限流封禁规则。
    1. 采用websockets替代HTTP协议:错误
      WebSocket是独立于HTTP的长连接通信协议,仅适用于专门实现了WS协议的服务端点。你要检测的是普通HTTP/HTTPS路径,目标服务器根本不会响应WebSocket握手请求,这个优化方向完全不匹配你的需求。
    1. 跳过内容加载减少传输消耗:正确
      你当前使用的GET请求会拉取完整的响应体内容,换成HEAD请求即可让服务器仅返回响应头(包含状态码)、不返回实体内容,能大幅降低传输耗时和带宽消耗。如果遇到部分服务器禁用了HEAD请求的场景,可以替换为带Range: bytes=0-0请求头的GET请求,仅拉取第一个字节的内容,也能达到近似效果。

现有代码的其他可优化点

你的代码中虽然创建了Session实例,但实际请求时调用的是顶层requests.get,完全没有用到Session的连接复用能力,相当于浪费了TCP/TLS握手复用的性能收益,这是首先要修正的错误。

优化后代码示例

#!/usr/bin/env python3
import requests
from concurrent.futures import ThreadPoolExecutor, as_completed

URL_BASE = "https://example.com/"
# 待检测路径列表
tests = ['file1', 'another-file', 'test.pdf', 'item-10000']
# 并发数,可根据实际情况调整
MAX_WORKERS = 100

def check_path(session: requests.Session, path: str) -> tuple[str, int]:
    try:
        # 用HEAD请求仅获取状态码
        resp = session.head(URL_BASE + path, timeout=5)
        return path, resp.status_code
    except Exception as e:
        return path, 0

if __name__ == "__main__":
    # 全局复用Session实现连接复用
    with requests.Session() as s:
        # 调整连接池大小匹配并发数
        adapter = requests.adapters.HTTPAdapter(pool_connections=MAX_WORKERS, pool_maxsize=MAX_WORKERS)
        s.mount('https://', adapter)
        s.mount('http://', adapter)
        
        with ThreadPoolExecutor(max_workers=MAX_WORKERS) as executor:
            futures = [executor.submit(check_path, s, path) for path in tests]
            for future in as_completed(futures):
                path, status = future.result()
                if status == 200:
                    print(f"200: {path}")
                else:
                    print(f"{status if status !=0 else 'ERR'}: {path}")

内容的提问来源于stack exchange,提问作者Kevin C

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 06:09:03