讲师中心 微信公众号
AI工具推荐 视频效率加速

Python 并发限流的实现思路

风涛吖_4679

风涛吖_4679

发布时间:2026-01-21 20:38:44

|

463人浏览过

|

来源于php中文网

原创

Python并发限流核心是控制任务并发数防资源过载,按场景选机制:单机用Semaphore或线程池,分布式用Redis+Lua,精细化用令牌桶算法。

python 并发限流的实现思路

Python 并发限流的核心目标是控制同时执行的任务数量,防止资源过载(如数据库连接耗尽、API 调用超频、CPU 或内存打满)。实现思路不依赖单一方案,而是按场景选择合适机制:轻量级用信号量或线程池控制并发数,分布式需引入外部协调(如 Redis),高精度限流则用令牌桶或漏桶算法。

基于 threading.Semaphore 的简单并发控制

适用于单进程内多线程/多协程(配合 asyncio)的粗粒度限流。Semaphore 本质是一个计数器,acquire() 减一、release() 加一,超出初始值时阻塞等待。

常见写法:

  • 初始化 sem = Semaphore(n),n 即最大并发数
  • 每个任务执行前调用 sem.acquire(),结束后必须 sem.release()(建议用 try/finally 或上下文管理器)
  • asyncio 中可用 asyncio.Semaphore,配合 async with sem: 更安全

利用 concurrent.futures.ThreadPoolExecutor 或 ProcessPoolExecutor

这是更“Pythonic”的方式——不手动管信号量,而是把限流逻辑交给执行器本身。max_workers 参数直接限制线程/进程数,底层自动排队调度。

立即学习“Python免费学习笔记(深入)”;

361SCAN security check your skill python scripts
361SCAN security check your skill python scripts

扫描并分析已安装技能,用于查看指定技能目录的名称、描述和详情,或列出所有已安装的技能。

下载

优势明显:

  • 自带任务队列和异常传播,无需手动处理阻塞与释放
  • 支持 submit() 提交单个任务,或 map() 批量分发,返回 Future 对象便于结果收集
  • 适合 I/O 密集型(用 ThreadPoolExecutor)或 CPU 密集型(用 ProcessPoolExecutor)场景

分布式环境下的限流:Redis + Lua 原子操作

单机限流在微服务或多实例部署下失效,需共享状态。Redis 是常用选择,关键在于保证“检查+更新”原子性,避免竞态条件。

典型做法:

  • 用 Redis 的 INCR + EXPIRE 组合模拟滑动窗口,但存在临界问题;更稳妥的是用 Lua 脚本封装整个限流逻辑
  • 例如:脚本读取当前计数、判断是否超限、未超则 INCR 并设置过期时间,全程在 Redis 内原子执行
  • Python 端通过 redis-py 调用 eval() 方法传入脚本和参数,返回布尔值表示是否允许通过

精细化速率控制:令牌桶(Token Bucket)实现

当需要按“QPS”或“每秒请求数”动态限流(而非单纯控并发数),令牌桶更贴切。它以恒定速率向桶中添加令牌,每次请求消耗一个令牌,桶满则丢弃新令牌。

可选实现路径:

  • 单机:用 time.time() 记录上次填充时间,按间隔计算应新增令牌数,维护一个浮点数计数器
  • 分布式:将桶状态存 Redis,用 Lua 更新(如 key 存 last_time 和 tokens,每次请求脚本计算并返回是否允许)
  • 第三方库如 pyrate-limiter 已封装多种算法(令牌桶、漏桶、滑动窗口),支持内存/Redis 后端,开箱即用

热门AI工具

更多
UpDream
UpDream Hot

一款AI视频创作工具,主要用于哔哩哔哩推出的自研AI视频创作工具,适合需要提升相关任务效率的用户。

咔片AIPPT

一款在线AI演示文稿制作工具,可根据主题和内容需求辅助生成PPT结构与页面,提高演示材料制作效率。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

Laper
Laper Hot

Laper是专为编剧、导演和制片人推出的 AI 原生剧本创作工具。

火山引擎

火山引擎是一款面向企业的云计算与AI服务平台。

AionClaw
AionClaw Hot

AionClaw是一款面向办公、创作和编程任务的AI桌面智能体。

Seko
Seko Hot

一款AI视频创作工具,主要用于商汤科技推出的创编一体的AI短视频创作Agent,适合需要提升相关任务效率的用户。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

相关专题

更多
什么是分布式
什么是分布式

分布式是一种计算和数据处理的方式,将计算任务或数据分散到多个计算机或节点中进行处理。本专题为大家提供分布式相关的文章、下载、课程内容,供大家免费下载体验。

2053

2023.08.11

分布式和微服务的区别
分布式和微服务的区别

分布式和微服务的区别在定义和概念、设计思想、粒度和复杂性、服务边界和自治性、技术栈和部署方式等。本专题为大家提供分布式和微服务相关的文章、下载、课程内容,供大家免费下载体验。

3174

2023.10.07

登录token无效
登录token无效

登录token无效解决方法:1、检查token的有效期限,如果token已经过期,需要重新获取一个新的token;2、检查token的签名,如果签名不正确,需要重新获取一个新的token;3、检查密钥的正确性,如果密钥不正确,需要重新获取一个新的token;4、使用HTTPS协议传输token,建议使用HTTPS协议进行传输 ;5、使用双因素认证,双因素认证可以提高账户的安全性。

13906

2023.09.14

登录token无效怎么办
登录token无效怎么办

登录token无效的解决办法有检查Token是否过期、检查Token是否正确、检查Token是否被篡改、检查Token是否与用户匹配、清除缓存或Cookie、检查网络连接和服务器状态、重新登录或请求新的Token、联系技术支持或开发人员等。本专题为大家提供token相关的文章、下载、课程内容,供大家免费下载体验。

1645

2023.09.14

token怎么获取
token怎么获取

获取token值的方法:1、小程序调用“wx.login()”获取 临时登录凭证code,并回传到开发者服务器;2、开发者服务器以code换取,用户唯一标识openid和会话密钥“session_key”。想了解更详细的内容,可以阅读本专题下面的文章。

3817

2023.12.21

token什么意思
token什么意思

token是一种用于表示用户权限、记录交易信息、支付虚拟货币的数字货币。可以用来在特定的网络上进行交易,用来购买或出售特定的虚拟货币,也可以用来支付特定的服务费用。想了解更多token什么意思的相关内容可以访问本专题下面的文章。

5981

2024.03.01

线程和进程的区别
线程和进程的区别

线程和进程的区别:线程是进程的一部分,用于实现并发和并行操作,而线程共享进程的资源,通信更方便快捷,切换开销较小。本专题为大家提供线程和进程区别相关的各种文章、以及下载和课程。

4258

2023.08.10

Python 多线程与异步编程实战
Python 多线程与异步编程实战

本专题系统讲解 Python 多线程与异步编程的核心概念与实战技巧,包括 threading 模块基础、线程同步机制、GIL 原理、asyncio 异步任务管理、协程与事件循环、任务调度与异常处理。通过实战示例,帮助学习者掌握 如何构建高性能、多任务并发的 Python 应用。

1189

2025.12.24

Gradle插件开发入门教程
Gradle插件开发入门教程

本专题介绍Gradle插件开发的基本流程,涵盖插件类编写、自定义任务注册、扩展参数设计和插件应用方法,帮助你理解插件如何组织构建逻辑,减少多个项目之间的重复配置。

0

2026.10.22

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Uvicorn官方安装与入门手册
Uvicorn官方安装与入门手册

共0课时 | 0人学习

Python uv官方项目管理指南
Python uv官方项目管理指南

共0课时 | 0人学习

Python uv官方安装与入门文档
Python uv官方安装与入门文档

共0课时 | 0人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn