当使用python处理大量文件时,可能会遇到“[Errno 24] Too many open files”的错误提示,也就是打开文件过多,超出了系统允许的最大文件打开数量限制。这个错误提示出现的原因是操作系统默认的最大打开文件描述符数量限制,解决方法有两个:
方法一:增加系统文件描述符限制
1. 通过命令行修改文件描述符限制
打开命令行,输入下面的命令可以查询系统当前的文件描述符限制:
ulimit -n
这个命令会返回当前的文件描述符限制数。
要修改文件描述符限制,输入下面的命令:
ulimit -n 数量
“数量”表示你希望系统限制的文件描述符数量。请特别留意,在只有当前用户拥有的情况下,你能够调整的最大值取决于当前用户的限制。也就是说,如果当前用户的最大文件描述符限制为1024,我们不能将它设置为2048。这时会出现这个错误提醒:
-bash: ulimit: open files: cannot modify limit: Operation not permitted
2. 通过修改系统文件修改文件描述符限制
为了更改系统的文件描述符限制,用户应编辑/sys/system/limits.conf文件。修改后在/etc/profile文件中应添加如下两行:
#用于设置最大打开文件数量的系统级别限制
* soft nofile 1000000
* hard nofile 1000000
这里hard和soft关键字分别表示硬限制和软限制,nofile表示限制类型(文件句柄数量),1000000表示最大值。
在修改后重启系统或当前shell会话后,我们可以通过以下命令验证更改是否生效:
ulimit -n
如果看到的结果与前面设置的hard nofile值相等,则表示设置成功。
方法二:通过正确关闭已经打开的文件来释放文件资源
如果系统文件描述符限制不能修改或者修改不支持,那么我们需要关闭已经打开的文件来释放资源。下面两个示例说明了如何释放文件资源:
示例1
在循环中打开文件时,不要忘记关闭文件句柄:
file_open_error_flag = False
for filename in filenames:
my_file = None
try:
my_file = open(filename, 'r')
file_data = my_file.read()
my_file.close()
# Do something with file_data
except IOError:
# Handle error
file_open_error_flag = True
finally:
if my_file:
my_file.close()
if file_open_error_flag:
print("Something went wrong")
示例2
使用with语句来打开文件,文件读入结束之后自动关闭:
file_open_error_flag = False
for filename in filenames:
try:
with open(filename, 'r') as my_file:
file_data = my_file.read()
# Do something with file_data
except IOError:
# Handle error
file_open_error_flag = True
if file_open_error_flag:
print("Something went wrong")
以上两种方法可解决“[Errno 24] Too many open files”的错误提示。第一种方法修改系统的最大文件打开数量限制,第二种方法通过正确关闭打开的文件来释放文件资源。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python错误提示:[Errno 24] Too many open files的分析与解决 - Python技术站