Python/too many open files 的正确解决方法
一般的解决方法
基本思路是,将DataFrame拆成若干组分,最后通过pandas.concat合并起结果
在 Linux 环境下进行文件相关的处理时,可能会出现 OSError: [Errno 24] Too many open files
的错误。
原因是 linux 中每个进程都会限制打开的文件数量。
使用 ulimit -n
可以查看每个进程最大的文件数量,默认是 1024,可以通过修改这个参数来放宽文件数量的限制:ulimit -n 4096
,这个方法只对当前的 shell 有用,退出再重新登录就会恢复为默认值。
也可以修改配置文件 /etc/security/limits.conf
,在文件最后加入如下两行即可:
1 | * soft nofile 4096 |
*
表示用户,如果需要指定某个用户,例如 test
:
1 | test soft nofile 4096 |
也可以简写为一行:
1 | test - nofile 4096 |
但上面说的方法都是治标不治本,因为根本原因是你的代码打开了太多的文件并且没有及时关闭。
正确的解决方法是
正确的解决方法
可以通过如下命令查看你进程打开的文件名,例如 进程 id 为 24404:
1 | lsof -p 24404 |
查看打开而没有关闭的文件,然后再仔细检查代码里打开文件的代码,并添加关闭文件的代码即可。
通过如下命令可以查看进程打开的文件数量:
1 | lsof -p 24404 | wc -l |