你是否遇到过这样的问题?要对一批大文件进行处理(如读取、清洗、转换格式),结果一个一个处理太慢;明明电脑 CPU 有 8 核,Python 却只吃了一个核,效率低得离谱;用 threading 多线程还是没快多少,因为 Python 的 GIL 限制住了它的发挥……别急,今天教你一招:
用 multiprocessing 模块 开启多进程并行处理任务,让 Python 真正用上多核 CPU,速度暴涨!
我们要解决什么?
场景:对一个大文件夹中的所有 .txt 文件进行批量处理
比如你要统计每个文本文件中的关键词数量,或进行格式转换、数据提取。
技术核心
模块用途
multiprocessing 创建多个独立进程并发处理
os 遍历目录,获取文件路径
实战代码:多进程处理文件夹下的文本文件
import os
import time
from multiprocessing import Pool, cpu_count
# 要处理的文件夹路径
FOLDER_PATH = "./texts"
# 定义你的文本处理逻辑
def process_file(file_path):
with open(file_path, "r", encoding="utf-8") as f:
content = f.read()
word_count = len(content.split())
print(f"{os.path.basename(file_path)} 有 {word_count} 个单词")
return word_count
# 获取所有 txt 文件路径
def get_txt_files(folder):
return [os.path.join(folder, f) for f in os.listdir(folder) if f.endswith(".txt")]
def main():
start = time.time()
files = get_txt_files(FOLDER_PATH)
# 创建进程池,核心数 = CPU 核心数
with Pool(processes=cpu_count()) as pool:
pool.map(process_file, files)
print(f"所有文件处理完成,用时 {time.time() - start:.2f} 秒")
if __name__ == "__main__":
main()
运行效果
假设有 20 个 txt 文件,单线程处理需约 10 秒,多进程只需 2~3 秒!
终端输出示例:
a.txt 有 132 个单词
b.txt 有 245 个单词
...
所有文件处理完成,用时 2.33 秒
多进程的优势在哪?
跳过 GIL 限制:每个进程是独立的 Python 解释器;
CPU 全核利用:multiprocessing 可以用满你的 4核/8核 CPU;
使用简单:一行 pool.map() 轻松调度任务;
进阶玩法(选讲)
你还可以配合以下技巧,让多进程更强大:
技巧简介
pool.apply_async 异步提交任务,适合动态调度
multiprocessing.Queue 进程间通信
lock + counter 安全统计共享变量(如总词数)
Process + join() 手动创建进程,掌控更灵活
应用场景拓展
批量爬虫:抓取网页/下载图片
多文件转换:如批量 PDF 转 TXT
数据处理:并行处理 CSV/日志文件
CPU 密集型任务:图像识别、加密计算
总结一句话:
如果你做的是 CPU 密集型 任务,记得用 multiprocessing,别再让你的多核 CPU 吃灰了!
更多相关技术内容咨询欢迎前往并持续关注好学星城论坛了解详情。
想高效系统的学习Python编程语言,推荐大家关注一个微信公众号:Python编程学习圈。每天分享行业资讯、技术干货供大家阅读,关注即可免费领取整套Python入门到进阶的学习资料以及教程,感兴趣的小伙伴赶紧行动起来吧。
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!