Ответ 1
import tempfile
import os
for idx in xrange(1024 + 1):
outfd, outsock_path = tempfile.mkstemp()
outsock = os.fdopen(outfd,'w')
outsock.close()
На моей машине 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
из f
и path
просто int
и str
, поэтому я не уверен, как закрыть каждый файл, открылся. Как закрыть файлы из tempfile.mkstemp?
import tempfile
import os
for idx in xrange(1024 + 1):
outfd, outsock_path = tempfile.mkstemp()
outsock = os.fdopen(outfd,'w')
outsock.close()
Так как 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)
Используйте os.close()
, чтобы закрыть дескриптор файла:
import os
from tempfile import mkstemp
# Open a file
fd, path = mkstemp()
# Close opened file
os.close( fd )