如何解决使用 ThreadPoolExecutor python 的内存泄漏
我有一个获取一些id的过程,并根据这些id,我从数据库中获取(pandas)数据帧,经过一些处理后,数据帧使用to_csv存储到文件系统,然后使用{删除数据帧{1}}。
数据帧的获取和处理是使用 ThreadPoolExecutor 完成的。
del
其中 with futures.ThreadPoolExecutor(max_workers=number_of_workers) as executor:
return list(executor.map(func,args))
是流程,func
是客户 ID。
尽管 del 和线程预计会结束,但我看到内存使用情况仍然存在,我的预感是数据帧仍然存在于内存中。
如何清理内存..??
PS:我也试过 gc...没有用
解决方法
在清理内存之前,您必须了解正在积累的内容。
运行该序列几十次并收集一个实时核心(例如,使用 gcore),或者确保您的“ulimit -c”值是这样的,以便您可以在进程终止时创建一个核心并运行该序列循环直到它死亡。
当你有一个合适的核心时,用chap打开它,看到(https://github.com/vmware/chap)并用以下命令开始:
redirect on
summarize leaked
summarize used /sortby bytes
如果确实存在泄漏,就分配不再可达而言,总结泄漏的结果会告诉您这一点。如果没有泄漏,summarize used /sortby bytes 的输出应该让您知道下一步该往哪里看。
可能有一些与 Pandas 相关的巨大缓冲区。您可以通过
找到它们summarize used /minsize 100000
然后从那里跟随传入的边缘。如果您遇到困难,请发布摘要中的部分结果,我可能会让您摆脱困境。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。