深入解析httpx.AsyncClient()的stream方法超时机制与实战应用

python-httpx 发送http2.0时代请求 在日常开发中,经常会发送各种各样的网络请求。Python中常用的网络请求库有requests、aiohttp、httpx等,httpx是基于Python3的新一代的网络请求库,它的功能很丰富,做个简答的介绍。 httpx是Python新一代的网络请求库,它包含以下特点 特点 基于Python3的功能齐全的http请求模块 既能发送同步请求,也能发送异步请求 支持HTTP/1.1和HTTP/2 能够直接向WSGI应用程序或者ASGI应用程序发送请求 安装 httpx需要Python3.6+(使用异步请求 阅读详情

1. 从一次“管道已关闭”的报错说起

最近在做一个AI对话项目,需要对接一个流式输出的API接口。我兴冲冲地写好了代码,用上了httpx的AsyncClient和stream方法,想着异步加流式,性能肯定杠杠的。结果一跑起来就傻眼了:当服务器那边生成内容稍微慢一点,比如第一段数据花了5、6秒才吐出来,我的客户端这边就直接把连接给掐断了。服务器好不容易准备好数据要发送,却发现“管道已关闭”,直接返回一个错误。这感觉就像你打电话订外卖,刚说完地址,因为对方复述得慢了一点,你就把电话挂了,然后还在纳闷外卖怎么一直不来。

这个问题看似简单,背后其实是httpx.AsyncClient().stream()方法在超时控制上的一个关键机制。很多朋友,包括当时的我,可能都以为给stream方法传一个timeout参数,比如timeout=30.0,就是给整个流式响应过程30秒的总时间。但实际上,这个理解是片面的,甚至可以说是导致“管道关闭”问题的根源。httpx的超时设计得非常精细,尤其是在处理流式响应时,它区分了连接超时、读取超时和整个请求生命周期的总超时。如果我们配置不当,比如只设置了一个很短的读取超时,那么即使总时间还很充裕,客户端也会因为在等待第一个数据包时“不耐烦”而主动关闭连接。

所以,这篇文章我就结合自己踩过的坑,来和你深入聊聊httpx.AsyncClient().stream()方法的超时机制。我会用最直白的话解释清楚Timeout对象里那几个参数到底管着哪一段“时间”,然后给出几种实战场景下的配置方案,并附上可以直接抄作业的代码。我们的目标很简单:让流式请求既稳定又高效,不再出现莫名其妙的“管道已关闭”。

2. 拆解httpx.Timeout:你的时间到底花在哪儿了?

要解决问题,得先看懂工具。httpx的超时配置核心是httpx.Timeout这个类。它不是简单的一个数字,而是一个包含了多个时间维度的组合体。直接给timeout参数传一个浮点数(如timeout=5.0)是一种快捷方式,httpx会用它来设置所有维度的超时。但对于流式请求这种复杂场景,我们需要更精细的控制。

让我们把Timeout对象拆开来看,它主要管理四个关键的时间段:

  1. 连接超时 (connect): 这个时间是从你发起请求,到TCP连接成功建立所允许的最大耗时。包括DNS解析、TCP三次握手、SSL握手(如果是HTTPS)等。如果网络状况不佳或者服务器端口没开,这个阶段就会超时。对于流式请求,连接建立是第一步,必须成功。
  2. 读取超时 (read): 这是最容易引发“管道关闭”问题的罪魁祸首。它指的是从连接建立成功开始,到成功接收到下一个数据包之间所允许的最大等待间隔。注意,它不是整个响应体的读取总时长,而是等待两个数据包之间的空闲时间。在流式响应中,服务器可能每隔几秒甚至十几秒才吐出一段数据,如果read超时设置得比这个间隔还短,客户端就会在等待下一个数据包时超时并关闭连接。
  3. 写入超时 (write): 指客户端发送请求体数据到服务器的最大允许时间。对于通常使用GET方法的流式请求,或者请求体很小的POST请求,这个超时一般不是问题。
  4. 池超时 (pool): 当使用连接池时,从池中获取一个空闲连接所允许的最大等待时间。

最关键的,还有一个隐形的总超时。当你像这样创建一个Timeout对象:Timeout(connect=5.0, read=30.0),httpx会自动计算一个总超时,其值等于所有显式设置超时参数的总和(这里是35秒)。这个总超时限制了整个请求(从开始到响应体完全关闭)的最大生命周期。即使read超时还没触发,如果总耗时超过了这个隐形总超时,请求也会被终止。

理解了这个机制,我们回头看原始问题:“第一个字符返回用时5s”导致管道关闭。很可能代码里只设置了一个很短的timeout数字(比如5秒),或者错误配置了read超时。服务器用5秒生成了第一个字符,但客户端的read超时可能只有2秒,在等待第一个数据包的这5秒里,read超时就触发了,客户端主动关闭连接,服务器后续发送数据自然就遇到了关闭的管道。

3. 实战配置:如何为流式接口量身定制超时?

知道了原理,配置起来就有方向了。我们的核心策略是:放宽read超时,甚至考虑禁用它,同时设置一个合理的总超时来控制整个请求的生命周期,防止无限等待。

下面我给出几种常见的配置方案,你可以根据自己的业务场景选择。

3.1 方案一:基础稳健型配置

这种方案适用于大多数已知的、响应速度相对稳定的流式API。

import httpx
from httpx import Timeout

async def fetch_stream_data(url: str, params: dict):
    # 关键配置:单独定义Timeout对象
    timeout_config = Timeout(
        connect=5.0,   # 连接超时5秒,网络正常时足够
        read=60.0,     # 读取超时60秒,允许服务器有较长的思考停顿
        write=5.0,     # 写入超时5秒,通常足够
        pool=5.0       # 连接池超时5秒
    )
    # 注意:此时总超时 = 5+60+5+5 = 75秒

    async with httpx.AsyncClient(timeout=timeout_config) as client:
        async with client.stream('GET', url, params=params) as response:
            response.raise_for_status()
            async for chunk in response.aiter_bytes():
                # 处理每一块流式数据
                yield chunk.decode('utf-8')

这个配置的思路是:给read一个非常宽松的时间(比如60秒),远大于服务器生成数据的可能间隔。这样,即使服务器“卡住”几十秒才输出下一段,连接也不会断。而总超时(75秒)作为一个安全网,确保整个请求不会无限制地挂起,超过75分钟会自动结束。

3.2 方案二:禁用读取超时,完全依赖总超时

如果你的流式接口响应间隔非常不规律,或者你希望只要连接还在,就永远等待下一个数据包,直到达到一个总的请求时限,那么可以禁用read超时。

import httpx
from httpx import Timeout

async def fetch_stream_without_read_timeout(url: str):
    # 将 read 超时设置为 None,表示无限等待下一个数据包
    timeout_config = Timeout(connect=5.0, read=None, write=5.0, pool=5.0)

    # 但是,我们需要一个总超时!这里通过给 `timeout` 参数传一个元组来实现。
    # httpx 允许 timeout=(connect_timeout, read_timeout, write_timeout, pool_timeout)
    # 但更清晰的做法是使用 Timeout 对象,并通过另一个方式控制总时长(见下文说明)
    async with httpx.AsyncClient() as client:
        # 注意:直接将 Timeout 对象传入 stream 方法,而不是 Client
        # 并且,为了有总超时,我们可以将 read 设为一个极大值,并利用总超时限制。
        safer_timeout = Timeout(connect=5.0, read=3600.0, write=5.0, pool=5.0) # 总超时约1小时
        async with client.stream('GET', url, timeout=safer_timeout) as response:
            # 或者,使用 asyncio.wait_for 在外部包装整个异步上下文,实现总超时(更推荐)
            pass

更推荐的做法是结合asyncio来设置总超时,这样逻辑更清晰:

import asyncio
import httpx
from httpx import Timeout

async def fetch_stream_with_total_timeout(url: str):
    async def _request():
        # 禁用read超时,完全依赖外部总超时
        timeout_config = Timeout(connect=5.0, read=None, write=5.0, pool=5.0)
        async with httpx.AsyncClient() as client:
            async with client.stream('GET', url, timeout=timeout_config) as response:
                async for chunk in response.aiter_text():
                    print(chunk, end='')
                    # 重要:如果希望提前结束,可以在这里判断条件并break

    try:
        # 为整个流式请求设置一个总超时,例如300秒(5分钟)
        await asyncio.wait_for(_request(), timeout=300.0)
    except asyncio.TimeoutError:
        print("整个流式请求超时(总时长超过5分钟)")

这种方法将超时控制分为两层:httpx.Timeout管理连接、写入等底层网络行为的超时,并将read设为None;而asyncio.wait_for管理整个业务逻辑的最大执行时间。这是处理长周期、不规则流式请求非常有效的方式。

3.3 方案三:动态超时与心跳检测

对于超长对话或者服务器性能不确定的场景,我们可以实现一个更智能的模式:动态重置读取超时。基本思路是,每次成功接收到一个数据块,就把“读取超时”的倒计时重置。同时,可以加入心跳检测,如果长时间没收到数据,主动发送一个探测包(如果协议支持)。

由于httpx的Timeout对象在创建后是不可变的,动态重置需要一些技巧。一种实践是在应用层实现一个看门狗(watchdog)任务:

import asyncio
import httpx

async def smart_stream_fetch(url: str, heartbeat_interval: int = 30):
    last_data_time = asyncio.get_event_loop().time()
    data_received = asyncio.Event()
    timeout_occurred = asyncio.Event()

    async def watchdog():
        """看门狗任务,监测数据接收间隔"""
        while not timeout_occurred.is_set():
            await asyncio.sleep(1) # 每秒检查一次
            idle_time = asyncio.get_event_loop().time() - last_data_time
            if idle_time > heartbeat_interval:
                print(f"警告:已 {idle_time:.1f} 秒未收到数据,连接可能已僵死。")
                # 这里可以尝试发送协议允许的心跳包,或者主动关闭重连
                # 例如:对于某些SSE接口,可以发送一个注释行作为心跳
                timeout_occurred.set()
                break

    async def do_request():
        # 设置一个相对较短的读取超时,由看门狗来管理长空闲
        timeout = httpx.Timeout(connect=5.0, read=heartbeat_interval+5, write=5.0)
        async with httpx.AsyncClient() as client:
            async with client.stream('GET', url, timeout=timeout) as response:
                watchdog_task = asyncio.create_task(watchdog())
                try:
                    async for chunk in response.aiter_bytes():
                        # 收到数据,更新最后时间并通知看门狗
                        nonlocal last_data_time
                        last_data_time = asyncio.get_event_loop().time()
                        data_received.set()
                        data_received.clear() # 重置事件,供下次使用
                        yield chunk
                finally:
                    watchdog_task.cancel()
                    try:
                        await watchdog_task
                    except asyncio.CancelledError:
                        pass

    try:
        async for data in do_request():
            # 处理数据
            pass
    except httpx.ReadTimeout:
        print("网络读取超时(基于httpx.Timeout.read)")
    except Exception as e:
        print(f"其他错误: {e}")

这个方案稍微复杂,但它提供了最强的健壮性,特别适合对稳定性要求极高的生产环境。

4. 避坑指南与最佳实践

配置好了超时,在实际使用stream方法时,还有一些细节需要注意,能帮你避开不少坑。

第一,务必使用异步迭代器正确消费数据。 response.aiter_bytes()、response.aiter_text()、response.aiter_lines() 是正确的方式。不要试图用response.read()或者response.text,这些方法会尝试把整个流式响应体读到内存,对于大响应会直接卡死或爆内存。我见过有新手因为用了response.text,然后奇怪为什么超时设置不起作用——请求在读取阶段就卡住了。

第二,注意响应头Content-Type的检查。 流式接口常见的有text/event-stream (Server-Sent Events)、application/x-ndjson (换行分隔的JSON) 或者简单的text/plain。在代码开始处理数据体之前,先检查一下content-type,可以帮你更快地定位问题,也能安全地选择对应的解析方式。

async with client.stream(...) as response:
    content_type = response.headers.get('content-type', '').lower()
    if 'text/event-stream' in content_type:
        # 使用SSE解析器,例如 `httpx-sse` 或自定义解析
        pass
    elif 'application/json' in content_type or 'application/x-ndjson' in content_type:
        async for line in response.aiter_lines():
            if line.strip():
                data = json.loads(line)
                # 处理JSON对象
    else:
        # 按纯文本或字节流处理
        async for chunk in response.aiter_text():
            # 处理文本块

第三,优雅地处理客户端中断。 用户可能中途关闭网页,或者你的业务逻辑决定提前终止请求。这时,你应该主动地、优雅地关闭响应流,而不是直接丢弃任务。在async with client.stream(...) as response:的上下文管理器内,如果提前break出迭代循环,上下文管理器退出时会自动关闭响应。但如果你是在一个更外层的循环或任务中,确保异常能被捕获并执行必要的清理。

第四,连接复用与客户端实例生命周期。 为了性能,最好在应用级别复用同一个AsyncClient实例,而不是为每个请求都创建一个。但是,要注意这个长期存活的客户端实例的超时配置是全局的。如果你的应用需要同时请求快慢不同的接口,更推荐在每次调用client.stream()或client.get()时传入特定的timeout参数,它会覆盖客户端实例的默认超时设置。

# 推荐做法:在app启动时创建客户端,在请求时指定超时
app_client = httpx.AsyncClient()

# 快速API请求
fast_resp = await app_client.get("https://api.fast.com", timeout=2.0)
# 慢速流式API请求
async with app_client.stream("https://api.slow-stream.com", timeout=Timeout(read=60.0)) as stream:
    ...

第五,日志与监控。 给超时事件加上清晰的日志。记录下超时的类型(连接、读取)、发生的URL、设置的超时值以及已经等待的时间。这在你后期排查是网络问题、服务器问题还是自身配置问题时,有巨大的帮助。你可以考虑使用httpx的事件钩子(event hooks) 来统一捕获和记录超时异常。

async def log_timeout(request: httpx.Request):
    # 这个钩子会在请求超时时被调用(如果httpx版本支持)
    print(f"请求超时: {request.url}")

client = httpx.AsyncClient(event_hooks={'request': [log_timeout]})

把这些点都注意到,你的httpx流式请求就能既稳定又高效地跑起来了。说到底,超时配置没有一成不变的银弹,核心还是理解你的业务场景:服务器通常多久响应?允许的最大等待时间是多少?网络环境是否稳定?结合这些信息,再运用上面提到的配置方案和避坑技巧,你就能找到最适合自己项目的那把钥匙。

Python异步编程:httpx.AsyncClient的stream方法超时设置全解析 本文深入解析了Python httpx库中AsyncClient.stream()方法的超时设置机制。针对流式请求场景,详细阐述了timeout参数的多维度含义,特别是read超时对数据块间隔的控制作用,并提供了不同业务场景下的配置策略与代码示例,帮助开发者构建稳定高效的异步HTTP流式请求。 阅读详情

相关推荐

基于智谱GLM-5构建命令行AI助手:从工具链选型到实战开发

命令行界面(CLI)是开发者与操作系统交互的核心工具,通过脚本和管道组合能高效完成自动化任务。其工作原理在于解析用户输入的命令与参数,调用相应的程序或系统调用执行操作。将大语言模型(LLM)集成到CLI中,能极大扩展命令行的智能边界,实现自然语言到可执行指令或代码的转换,提升开发与运维效率。这种结合在代码生成、日志分析、系统调试等场景下具有显著价值。本文以智谱GLM-5模型为例,详细阐述了构建此类智能CLI工具的核心技术选型与实现路径,重点涵盖了Click框架、异步HTTP客户端httpx以及配置管理等关键

靓靓软件工作室 387

python --httpx异步请求

异步支持 HTTPX默认情况下提供标准的同步API,但是如果需要,还可以为你提供异步客户端的选项 。要发出异步请求,你需要一个httpx.AsyncClient import asyncio import httpx async def main(): async with httpx.AsyncClient() as client: response = await client.get('https://example.org/') loop = asyncio.get

weixin_44634704的博客 3614

ChatGPT API性能优化实战:8个关键参数配置提升300% QPS

在构建基于大语言模型的智能应用时,API调用性能优化是工程实践中的核心挑战。理解远程网络服务的延迟、吞吐量与成本之间的平衡关系,是设计高并发系统的关键。通过合理配置连接超时、读取超时和并发连接数等网络参数,可以有效管理资源并提升系统稳定性。结合指数退避重试策略和客户端限流机制,能够优雅应对服务波动与速率限制。在ChatGPT API的实际应用中,启用流式响应和精准控制输出Token数,不仅能显著降低用户感知延迟,还能优化Token消耗与成本。本文基于智能客服系统升级的实战经验,详细解析了从默认配置到生产级优

weixin_30314813的博客 419

Python3的下一代HTTP客户端——HTTPX

在 Python 中,访问网络资源最有名的库就是requestsaiohttp和httpx。一般情况下,requests只能发送同步请求;aiohttp只能发送异步请求;httpx既能发送同步请求,又能发送异步请求。下面,就着重介绍一下httpx的使用方法。

bagell的博客 1554

DeepSeek-v4-pro实战避坑指南:从网络通信到生产归档

大语言模型API调用并非简单发送HTTP请求,而涉及模型命名规范、流式响应协议(SSE)、超时机制嵌套、本地部署驱动兼容性等底层工程细节。DeepSeek-v4-pro作为典型现代LLM服务,其行为受网关路由、Ollama镜像分层、CUDA绑定、工具调用扩展(如OpenClaw)等多重因素影响。掌握model参数校验、Accept头设置、HTTP/2连接复用、SSE字节流解析等关键技术,是保障低延迟、高可用推理的基础。本文聚焦DeepSeek-v4-pro在本地调试、VS Code集成、Python SDK

weixin_34023982的博客 382

基于本地大模型与MCP协议构建AI编程助手:从部署到安全实践

在AI编程与自动化领域,大语言模型(LLM)已成为提升开发效率的核心技术。其原理在于通过海量代码数据训练,使模型能够理解自然语言指令并生成对应代码。这一技术价值在于将高级任务描述转化为可执行代码,极大降低了编程门槛。结合AI Agent架构,模型不仅能生成代码,更能通过标准化协议与外部工具交互,实现自动化工作流。其中,Model Context Protocol(MCP)作为关键协议,定义了AI模型与外部工具间安全、结构化的通信规范。本文聚焦于将开源代码大模型(如DeepSeek-Coder)通过ollam

weixin_33681778的博客 459

httpx 与 异步

HTTPX 是新一代的 python 解析库,它是一个功能齐全的 HTTP 客户端,用于Python 3,较requests(只能发送同步请求)和 aiohttp(只能发送异步请求)不同的是,它同时提供同步和异步 API,有些网站强制使用 HTTP / 2.0 协议访问,urllib 和 requests 是无法爬取数据的,它们只支持HTTP / 1.1,而 HTTPX 则全部支持。

Yy_Rose的博客 5909

零基础搭建VSCode+本地大模型AI编程工作流

AI编程辅助已从云端服务走向本地可控的基础设施。OpenAI兼容API作为通用接口标准,使VSCode等编辑器能解耦调用各类代码大模型(如Qwen、Phi-3、Llama3),无需依赖Copilot订阅或境外网络。其核心原理是通过轻量路由网关实现请求中转与提示词注入,兼顾模型可替换性、响应可调试性与环境可复现性。该架构显著降低教学部署门槛,支持离线实训、企业内网开发及新手入门,在Python教学、AI编程实验、国产化替代等场景中具备强工程落地价值。Codex级联与Wireshark抓包正是理解这一本地AI工

weixin_30298497的博客 453

鸿蒙智能体开发实战:35.鸿蒙壁纸大师 - 调用火山引擎模型生成壁纸

鸿蒙壁纸大师基于火山引擎三大AI模型协同架构,采用分层设计实现高效壁纸生成服务。系统包含语言模型、意图识别模型和图像生成模型,通过流式处理和异步调用优化用户体验。语言模型处理对话交互时采用SSE协议逐token返回响应,意图模型快速分类用户需求,专业文生图模型确保输出质量。该架构通过模型分工显著降低40%成本,同时保障了系统的高效性与稳定性。核心代码展示了模型调用、错误处理和流式数据解析等关键技术实现,体现了现代AI服务的设计理念。

少湖说 414

Maya绑定:人物绑定详细案例(创建骨骼、镜像骨骼、IK创建、IK打组、IK控制器、FK控制器、烘焙动画、导出)

Maya绑定:人物绑定详细案例(创建骨骼、镜像骨骼、IK创建、IK打组、IK控制器、FK控制器、烘焙动画、导出)

m0_45877477的博客 1635

【知识点总结】电路原理 第一讲

大家好,从今天起,我将开始更新自上大学以来所学到的各种知识,之所以选择更新它们是因为最近我一直在收拾整理自己自上大学以来所收获到的各种知识,看着那厚厚一沓的书本心里不由得犯愁。如果我想找到特定的知识,那岂不是得翻到猴年马月。俗话说得好,下雨天打鞋子,闲着也是闲着,为此我设置一个专栏,将知识点一一分类总结,目的在于更好的整理所学的知识。本人学艺不精,有一些知识点地方可能存在瑕疵,希望各位大佬可以多多指教。以下是本篇文章正文内容虚断:一般通用性运算放大器的正反向输入端之间的电阻非常非常的大。

weixin_51130221的博客 4万+

Claude Code与MiniMax-M2.1环境搭建与Python集成实战

大语言模型(LLM)的集成开发需要理解API认证、流式传输等核心技术原理。Bearer Token认证机制保障了接口调用的安全性,而流式响应处理则解决了长文本生成时的超时问题。在工程实践中,环境变量配置和SDK封装直接影响开发效率,特别是处理地域化API端点时。以MiniMax-M2.1为例,其Python SDK深度集成方案展示了如何通过httpx库实现异步请求,同时上下文长度管理和额度监控等技巧能有效避免常见错误。这些技术在智能对话系统、代码自动补全等场景中具有重要应用价值,而Claude Code终端

weixin_30721077的博客 368

天猫精灵设备拆机及系统分析

我手头的这个天猫精灵型号为TG_X1,黑色天猫精灵AI助手,拆解没有多少难度,但需要注意连接线的问题。具体的拆机过程可以参见:http://www.geekifix.com/wp/archives/415.html注意一点就是,天猫精灵的主板的位置,位于音频按键的底部,也就是顶端,而拆解是从电源的位置从低到顶进行拆机;拆机后,看到主控板的信息如下:主控型号:联发科 MT8516MT8516支持四核...

LeeKwen的专栏 3万+

GPT-4o实时语音与多模态工作流实战解析

大语言模型的多模态能力正从概念验证走向生产可用,其核心在于低延迟语音交互、跨模态语义对齐与上下文感知推理。GPT-4o通过端到端流式架构实现声学-语义联合优化,显著降低语音交互延迟,并在噪声环境与中英混合场景下保持鲁棒性;其视觉理解不再依赖OCR后处理,而是直接建模像素、文本与空间关系的语义梯度。技术价值体现在开发者可基于token来源细粒度调控算力、成本与路由策略。典型应用场景覆盖实时会议纪要生成、带批注文档合规审查、嵌入式日志语义调试等非结构化信息密集型任务——这正是当前AI工程落地的关键断点。

399

cartographer ceres后端优化

这里引用一篇文章作用一:用户可以选择使用Problem::AddParameterBlock显式添加参数块;在显式添加的时候ceres会内部进行额外的正确性检查。当Problem::AddParameterBlock()不存在时,Problem::AddResidualBlock()会隐式添加参数块,因此不需要显式调用Problem::AddParameterBlock()函数。ps:类似构造函数,显式构造函数。

南北粉面馆 804

Ubuntu系统下MRIcroN、FSL6.0.5、Freesurfer7.1.1、ANTs、MRtrix3、AFNI的安装详解——核磁共振数据处理必备

Ubuntu系统下MRIcroN、FSL6.05、Freesurfer7.1.1、MRtrix3、AFNI、ANTs的安装详解一、安装MRIcroN二、 FSL6.0.5完整安装与FSLeyes等Not Found修复Anaconda与虚拟环境(所有操作均在root下)获取最新版Anaconda3安装Anaconda3配置所有用户可用去掉恼人的base创建虚拟环境FSL与FSLeyes安装(所有操作均在root下)下载FSL安装FSL添加环境变量到/etc/bash.bashrc末尾 (ubuntu)或者

从事脑科学核磁共振方法学研究,在Nature communications等权威期刊发表研究论文,熟练掌握磁共振处理方法和统计学方法,欢迎大家和我交流。 6086

从模型到服务:构建高可用AI应用的技术栈与工程实践

人工智能模型服务化是将训练好的模型部署为在线推理服务的基础技术,其核心原理是通过标准化接口封装模型能力,实现高并发、低延迟的请求处理。这项技术的价值在于将复杂的AI能力转化为稳定可靠、易于集成的服务,从而支撑各类智能应用场景。在工程实践中,模型服务化通常涉及推理服务器部署、API网关构建和性能优化等关键环节。例如,使用vLLM等工具可以高效管理模型权重并实现持续批处理,而通过Docker容器化部署则能确保环境一致性。本文聚焦于如何通过vLLM和FastAPI等技术栈,将大型语言模型封装成可供广泛调用的服务,

weixin_30247307的博客 438

Python爬虫实战:百度贴吧帖子与评论抓取全攻略(附舆情分析技巧)

基础配置# 要爬取的贴吧名称(替换成自己需要的,比如“XX手游吧”)TIEBA_NAME = "XX手游"# 分页参数(每页50条帖子,可根据需求调整)PAGE_NUM = 3 # 爬取前3页帖子,共150条# 请求头(从浏览器复制自己的,更真实)Win64;

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 2390

Python进度条实战:从tqdm到rich的生产级进度反馈系统设计

进度条在Python中远不止是视觉装饰,而是融合时间建模、IO感知与用户体验的心理契约。其核心原理在于将不可见的任务执行过程映射为用户可理解的线性进度信号,依赖实时耗时采样、动态总量估算和线程/异步安全更新机制。技术价值体现在提升用户信任、降低中断率、支撑可观测性监控;典型应用场景包括网络爬虫的流式下载速率反馈、大文件分块处理的字节级进度追踪、机器学习pipeline的嵌套阶段可视化,以及实时日志分析中的三态(估算/处理/无限)动态建模。本文深入剖析tqdm与rich在生产环境中的关键差异与适配策略,覆盖r

weixin_34384557的博客 359

173、NPU的编译器开发:开源社区贡献指南

本文分享了在NPU编译器开源社区贡献的经验心得。作者通过实际案例(如卷积维度错误、NaN输出等)阐述了NPU编译器开发的特殊性:硬件迭代快、边界条件复杂、厂商代码不可全信。提出有价值的贡献应聚焦硬件适配测试、性能剖析工具和反模式文档三类内容。强调用实测数据沟通、主动承担维护责任、保持代码通用性等社区协作技巧,并建议通过RFC提前沟通、附硬件实测数据等方式提高PR通过率。最后指出,NPU编译器开发是与聪明人共同填坑的过程,鼓励开发者提交"有诚意的代码"而非完美代码。

m0_50546716的博客 38

上万条对话白分析了?智能客服质检避坑指南:90%团队倒在这些误区

当前客服质检普遍存在投入产出失衡的现象,根源在于十大误区:过度关注单点技术指标而忽视端到端解决能力、僵化的话术模板限制AI应变、数据孤岛阻碍知识进化、盲目追求拟人化牺牲效率、传统整改机制跟不上机器速度等。破局需重构质检体系,包括建立决策树质检法、设计复杂问题测试集、构建实时数据闭环、重置AI专属评价指标、实施分钟级热修复机制等。关键在于将质检从被动纠错升级为主动赋能,通过根因分析、场景化反馈、标准化评分和数据驱动优化,打造"问题诊断-改进-验证"

2202_75469062的博客 1542

从零到一构建情感疗愈应用:暖屿 (Warm Isle) 全栈技术架构深度解析

摘要 《暖屿技术实现讲解文档》详细介绍了情感疗愈应用暖屿的全栈技术架构。项目基于FastAPI+Vue3前后端分离架构,采用Docker容器化部署,核心功能包含情绪管理、AI陪伴等。文档系统讲解了后端基础设施(配置管理、依赖注入)、业务逻辑、实时通信等设计,以及前端Vue3的状态管理、组件化实践。关键技术包括异步架构、AI集成、支付系统等,并涵盖测试、代码规范及扩展建议。目标读者为开发者、技术学习者和项目维护者,提供了现代Web应用的完整技术实现参考。

2402_83239589的博客 1642

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

httpx.AsyncClient()的stream方法设置timeout超时

httpx.AsyncClient()的stream方法设置timeout超时配置

Maybe_9527的博客 1470

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

【Python】httpx 库:HTTP 客户端库(发送 HTTP 请求和处理响应)

httpx 是一个现代化的 Python HTTP 客户端库,设计用于发送 HTTP 请求和处理响应。它支持同步和异步 API,兼容 requests 库的接口,同时提供更强大的功能,如 HTTP/2、连接池、流式响应和异步支持。httpx 适合构建高性能 Web 客户端、爬虫、API 交互工具,以及需要异步 I/O 的应用。

彬彬侠的博客 3257

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

【安全工具】Httpx信息收集

HTTPX 是一个功能强大的 HTTP 客户端工具,用于执行各种网络任务,例如发现 Web 应用程序漏洞、探测域名和端口等。它使用了 retryablehttp 库来运行多个探测器,旨在通过增加线程数来提高结果的可靠性。HTTPX 支持多种 HTTP 请求方法,可以使用自定义标头和数据,并且可以设置请求超时时间、重试次数和批处理大小等选项。此外,HTTPX 还支持代理、SSL 和身份验证,并且可以查找和打印链接、横幅和技术指纹等信息。

信安是不可或缺的一部分! 1万+
上一篇: 从零开始:Linux云服务器部署若依前后端分离项目实战指南
下一篇: GORM实战:如何根据主键策略选择.Save()与.Create()
python9snake
博客等级 码龄1天 0粉丝 1724原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值