python - IOError : [Errno 24] Too many open files:

标签 python macos

我有一个巨大的文件,要写入大约 450 个文件。我收到错误,因为 打开的文件太多。我在网上搜索并找到了一些解决方案,但没有帮助。

import resource
resource.setrlimit(resource.RLIMIT_NOFILE, (1000,-1))
>>> len(pureResponseNames) #Filenames 
434
>>> resource.getrlimit(resource.RLIMIT_NOFILE)
(1000, 9223372036854775807)
>>> output_files = [open(os.path.join(outpathDirTest, fname) + ".txt", "w") for fname in pureResponseNames]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IOError: [Errno 24] Too many open files: 'icd9_737.txt'
>>> 

我还从命令行更改了 ulimit,如下所示:

$ ulimit -n 1200
$ ulimit -a
core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
file size               (blocks, -f) unlimited
max locked memory       (kbytes, -l) unlimited
max memory size         (kbytes, -m) unlimited
open files                      (-n) 1200
pipe size            (512 bytes, -p) 1
stack size              (kbytes, -s) 8192
cpu time               (seconds, -t) unlimited
max user processes              (-u) 709
virtual memory          (kbytes, -v) unlimited
$ 

我仍然遇到同样的错误。 PS:我也重新启动了系统并运行了程序,但没有成功。

最佳答案

“打开的文件过多”错误总是很棘手——您不仅要处理 ulimit,还必须检查系统范围的限制和 OSX 的具体情况。 This SO post gives more information on open files in OSX. (剧透警告:默认值为 256)。

但是,限制必须同时打开的文件数量通常很容易。如果我们看一下 Stefan Bollman 的示例,我们可以轻松地将其更改为:

pureResponseNames = ['f'+str(i) for i in range(434)]
outpathDirTest="testCase/"
output_files = [os.path.join(outpathDirTest, fname) + ".txt" for fname in pureResponseNames]

for filename in range(output_files):
    with open(filename, 'w') as f:
        f.write('This is a test of file nr.'+str(i))

关于python - IOError : [Errno 24] Too many open files:,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18280612/

相关文章:

python - 使用read_sas后如何从pandas对象类型的b'Text'中获取文本?

python - 将命令行参数传递给子进程模块

python - 滑子岛和 Flask 之间没有路线

macos - 目前有办法在 OSX 上测试 Microsoft Edge 吗?

c++ - Mac OSX - Xcode/泄漏问题

python - 使用 PyAudio 生成音调时,为什么我会在它们之间听到点击声?

c++ - 尝试在 Mac 上将 Eclipse 用于 c++ 项目

python - 如何从这些数字中获取日期

Python:itertools.islice 不在循环中工作

python - 在 Mac OS X 中移动光标(在 Python 和/或 R 中)