Python脚本首次运行结束后如何清理内存 解决TK部件重复运行数据累加问题
问题解决方案
核心诱因:存储爬取结果的容器(通常为列表)被定义为全局变量/在爬取逻辑外部初始化,多次触发爬取任务时未清空旧数据,直接往容器内追加内容导致数据叠加。
- 方案1(最推荐):将数据容器改为爬取函数内部变量
把用于存储爬取条目的列表(比如job_list)的初始化逻辑放到爬取任务函数内部,每次触发爬取任务时都会生成全新的空容器,旧容器会被Python自动回收,无需手动清理内存。参考代码:# 错误写法:全局变量,进程不关闭就会一直保留旧数据 # job_list = [] def crawl(keyword, file_name): # 正确写法:每次调用函数生成新的空列表 job_list = [] # 后续爬取逻辑,向job_list追加新获取的条目 # 写入CSV文件逻辑 - 方案2:每次启动爬取前手动清空全局容器
如果业务逻辑必须使用全局变量存储数据,就在每次爬取任务启动前调用容器的清空方法:job_list = [] def crawl(keyword, file_name): # 爬取启动前先清空旧数据 job_list.clear() # 后续爬取、写入CSV逻辑 - 方案3:CSV生成完成后主动释放内存
若爬取数据量较大需要及时释放内存,可以在CSV写入完成后手动删除存储变量,触发Python垃圾回收:import gc # CSV文件写入完成后执行 del job_list gc.collect()
额外排查点:确认写CSV文件时的打开模式为
'w'(覆盖写入),不要使用'a'(追加写入),避免磁盘文件层面的旧数据残留。
内容的提问来源于stack exchange,提问作者Yusuf
相关产品推荐
相关产品推荐

