Python/too many open files 的正确解决方法

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
2
* soft nofile 4096   
* hard nofile 4096

* 表示用户,如果需要指定某个用户,例如 test

1
2
test soft nofile 4096   
test hard nofile 4096

也可以简写为一行:

1
test - nofile 4096

但上面说的方法都是治标不治本,因为根本原因是你的代码打开了太多的文件并且没有及时关闭。

正确的解决方法是

正确的解决方法

可以通过如下命令查看你进程打开的文件名,例如 进程 id 为 24404:

1
lsof -p 24404

查看打开而没有关闭的文件,然后再仔细检查代码里打开文件的代码,并添加关闭文件的代码即可。

通过如下命令可以查看进程打开的文件数量:

1
lsof -p 24404 | wc -l

评论