0

0

Python 批量任务拆分的合理粒度

冷漠man

冷漠man

发布时间:2026-02-15 16:07:10

|

464人浏览过

|

来源于php中文网

原创

任务拆分过细会因调度开销导致性能下降:cpu密集型建议单批≥10ms(如100–1000条),io密集型单批不低于10次请求;map()自动分块而submit()需手动聚合;避免闭包引用大对象引发内存爆炸;不同执行器(线程/进程/asyncio)最优粒度差异显著,须实测确定。

python 批量任务拆分的合理粒度

任务拆分太细会导致调度开销压垮性能

Python 里用 concurrent.futuresasyncio 做批量任务时,不是越小越好。比如把 10 万条记录拆成 10 万个单条任务,线程/协程创建、上下文切换、结果收集的开销会远超实际计算时间。

  • CPU 密集型任务:单个子任务建议耗时 ≥ 10ms,通常按 100–1000 条/批较稳
  • I/O 密集型(如 HTTP 请求):可更细,但单批别低于 10 次请求,避免 TCP 连接反复建立
  • 使用 ThreadPoolExecutor.submit() 时,提交 10 万次调用比提交 100 次(每批千条)慢 3–5 倍,实测过

map() 和 submit() 的批处理行为差异很大

executor.map() 是同步批处理接口,内部已做 chunking;submit() 是逐个提交,完全由你控制粒度——这点常被忽略,导致误以为“用了线程池就自动优化了”。

  • map(func, items) 默认把 items 分块传给工作线程,块大小由 chunksize 参数控制,默认是 len(items) // (4 * worker_count)
  • 手动用 submit() 时,若循环里每次只传一个参数,等于放弃 chunking,必须自己聚合:executor.submit(process_batch, batch_list)
  • 异步场景下,asyncio.gather() 对上千个 await 任务也会卡顿,应改用 asyncio.as_completed() + 批量 create_task()

内存爆炸往往源于“假拆分”

表面拆了任务,但数据没真正切片,所有子任务仍引用同一份大对象(比如全局 dfsession),结果每个线程都拷贝一份,OOM 就在所难免。

手绘涂鸦教育信息图表矢量素材
手绘涂鸦教育信息图表矢量素材

手绘涂鸦教育信息图表矢量素材适用于企业报告、项目管理工具、效率提升研讨会、时间线图表、商务演示文稿、数据分析报告、教育和培训材料、时间管理软件界面、会议和研讨会宣传材料、年度业绩回顾、员工绩效评估、市场研究和分析报告以及任何需要展示时间管理和统计数据的商务场合。设计的AI格式素材。

下载
  • 别在闭包里直接引用大变量:executor.submit(lambda x: heavy_work(x, big_data), item) —— big_data 会被序列化进每个任务
  • 正确做法:把依赖显式传入,且只传必要字段,或用 multiprocessing.Manager 共享只读数据
  • Pandas 场景常见坑:df.iloc[start:end] 是视图,但传给子进程会触发隐式拷贝;改用 df.iloc[start:end].copy() 明确控制,或用 swifter / dask 替代手工拆分

不同后端对“合理粒度”的定义完全不同

同一个任务,在 ThreadPoolExecutorProcessPoolExecutorasyncio 下的最优拆分点可能差一个数量级。

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

  • 线程池:适合 I/O,单批 50–500 次请求较稳;CPU 密集型几乎无加速,还可能因 GIL 变慢
  • 进程池:适合 CPU 密集型,但进程启动成本高,单批至少 100ms 计算量才划算;注意 max_workers 别设超过 os.cpu_count()
  • asyncio:无进程/线程开销,但要求所有 I/O 都是异步的;混用 requests 这类同步库会阻塞整个事件循环,看似拆了,实则串行

真实项目里,粒度不是靠理论算出来的,得用 time.perf_counter() 在不同 batch_size 下跑三轮,看吞吐和内存峰值拐点在哪里。没人能替你跳过这步。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
Python 时间序列分析与预测
Python 时间序列分析与预测

本专题专注讲解 Python 在时间序列数据处理与预测建模中的实战技巧,涵盖时间索引处理、周期性与趋势分解、平稳性检测、ARIMA/SARIMA 模型构建、预测误差评估,以及基于实际业务场景的时间序列项目实操,帮助学习者掌握从数据预处理到模型预测的完整时序分析能力。

74

2025.12.04

Python 数据清洗与预处理实战
Python 数据清洗与预处理实战

本专题系统讲解 Python 在数据清洗与预处理中的核心技术,包括使用 Pandas 进行缺失值处理、异常值检测、数据格式化、特征工程与数据转换,结合 NumPy 高效处理大规模数据。通过实战案例,帮助学习者掌握 如何处理混乱、不完整数据,为后续数据分析与机器学习模型训练打下坚实基础。

4

2026.01.31

session失效的原因
session失效的原因

session失效的原因有会话超时、会话数量限制、会话完整性检查、服务器重启、浏览器或设备问题等等。详细介绍:1、会话超时:服务器为Session设置了一个默认的超时时间,当用户在一段时间内没有与服务器交互时,Session将自动失效;2、会话数量限制:服务器为每个用户的Session数量设置了一个限制,当用户创建的Session数量超过这个限制时,最新的会覆盖最早的等等。

325

2023.10.17

session失效解决方法
session失效解决方法

session失效通常是由于 session 的生存时间过期或者服务器关闭导致的。其解决办法:1、延长session的生存时间;2、使用持久化存储;3、使用cookie;4、异步更新session;5、使用会话管理中间件。

772

2023.10.18

cookie与session的区别
cookie与session的区别

本专题整合了cookie与session的区别和使用方法等相关内容,阅读专题下面的文章了解更详细的内容。

96

2025.08.19

lambda表达式
lambda表达式

Lambda表达式是一种匿名函数的简洁表示方式,它可以在需要函数作为参数的地方使用,并提供了一种更简洁、更灵活的编码方式,其语法为“lambda 参数列表: 表达式”,参数列表是函数的参数,可以包含一个或多个参数,用逗号分隔,表达式是函数的执行体,用于定义函数的具体操作。本专题为大家提供lambda表达式相关的文章、下载、课程内容,供大家免费下载体验。

212

2023.09.15

python lambda函数
python lambda函数

本专题整合了python lambda函数用法详解,阅读专题下面的文章了解更多详细内容。

192

2025.11.08

Python lambda详解
Python lambda详解

本专题整合了Python lambda函数相关教程,阅读下面的文章了解更多详细内容。

58

2026.01.05

pixiv网页版官网登录与阅读指南_pixiv官网直达入口与在线访问方法
pixiv网页版官网登录与阅读指南_pixiv官网直达入口与在线访问方法

本专题系统整理pixiv网页版官网入口及登录访问方式,涵盖官网登录页面直达路径、在线阅读入口及快速进入方法说明,帮助用户高效找到pixiv官方网站,实现便捷、安全的网页端浏览与账号登录体验。

139

2026.02.13

热门下载

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

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
最新Python教程 从入门到精通
最新Python教程 从入门到精通

共4课时 | 22.4万人学习

Django 教程
Django 教程

共28课时 | 4.3万人学习

SciPy 教程
SciPy 教程

共10课时 | 1.6万人学习

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

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号