已解决Python报错Memoryerror
粉丝群里面的一个小伙伴想用python读取大文件入库,但是发生了报错(当时他心里瞬间凉了一大截,跑来找我求助,然后顺利帮助他解决了,顺便记录一下希望可以帮助到更多遇到这个bug不会解决的小伙伴),报错代码如下::
打开文件代码:
def analysis_json(file, source_type, source_time):
f = open(file, 'r', encoding='utf-8', )
json_list = f.readlines()
...
return data_list1, data_list2, data_list3
多线程代码:
data_list1, data_list2, data_list3 = analysis_json(json_path, source_type, source_time)
# # 主表
t1 = Thread(target=insert_sql1, args=(data_list1,))
t1.start()
# 副表
t2 = Thread(target=insert_sql2, args=(data_list2,))
t2.start()
# 流程表
t3 = Thread(target=insert_sql3, args=(data_list3,))
t3.start()
报错信息截图如下:
报错信息翻译:内存映射
出现这个报错的原因就是因为内存炸了。
代码问题分析:
问题1:f = open(file, 'r', encoding='utf-8', )
打开了文件,但是没有关闭所以会一直在内存中
问题2:一个文件解析完了开多线程往三个表里面存,可能其他一个线程跑完了就又去读另一个文件导致越来越多的文件堵在内存中,最后内存崩了。小伙伴们按下面的方法一一解决即可!!!
1. 首先我们每次读完一个文件肯定是需要关闭文件,释放内存:
f = open(file, 'r', encoding='utf-8', )
# 中间写解析代码
# 关闭文件,释放内存
f.close()
2. 在用多线程的时候,加上上join()
等所有的子线程执行完在继续执行主线程代码:
t1.join()
t2.join()
t3.join()
本文已收录于:《告别Bug》专栏
本专栏用于记录学习和工作中遇到的各种疑难Bug问题,以及粉丝群里小伙伴提出的各种问题,文章形式:报错代码 + 报错翻译 + 报错原因 + 解决方法,包括程序安装、运行程序过程中等等问题,订阅专栏+关注博主后如遇到其他问题可私聊帮忙解决!!!