Как мне закрыть файлы из tempfile.mkstemp? - PullRequest
23 голосов
/ 30 марта 2012

На моей машине Linux машина ulimit -n дает 1024.Этот код:

from tempfile import mkstemp

for n in xrange(1024 + 1):
    f, path = mkstemp()    

завершается с ошибкой в ​​последнем цикле строки с:

Traceback (most recent call last):
  File "utest.py", line 4, in <module>
  File "/usr/lib/python2.7/tempfile.py", line 300, in mkstemp
  File "/usr/lib/python2.7/tempfile.py", line 235, in _mkstemp_inner
OSError: [Errno 24] Too many open files: '/tmp/tmpc5W3CF'
Error in sys.excepthook:
Traceback (most recent call last):
  File "/usr/lib/python2.7/dist-packages/apport_python_hook.py", line 64, in apport_excepthook
ImportError: No module named fileutils

Кажется, я открыл много файлов - но type из fpath - это просто int и str, поэтому я не уверен, как закрыть каждый файл, который я открыл. Как мне закрыть файлы из tempfile.mkstemp?

Ответы [ 3 ]

25 голосов
/ 30 марта 2012

Поскольку mkstemp() возвращает необработанный дескриптор файла, вы можете использовать os.close () :

import os
from tempfile import mkstemp

for n in xrange(1024 + 1):
    f, path = mkstemp()
    # Do something with 'f'...
    os.close(f)
15 голосов
/ 30 марта 2012
import tempfile
import os
for idx in xrange(1024 + 1):
    outfd, outsock_path = tempfile.mkstemp()
    outsock = os.fdopen(outfd,'w')
    outsock.close()
3 голосов
/ 30 марта 2012

Используйте os.close(), чтобы закрыть дескриптор файла:

import os
from tempfile import mkstemp

# Open a file
fd, path = mkstemp()  

# Close opened file
os.close( fd )
...