python - ¿Cómo cierro los archivos de tempfile.mkstemp?
ulimit (3)
En mi máquina, la máquina de ulimit -n
da 1024
. Este codigo
from tempfile import mkstemp
for n in xrange(1024 + 1):
f, path = mkstemp()
falla en el último bucle de línea con:
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
Parece que he abierto muchos archivos, pero el type
de f
y la path
son simplemente int
y str
así que no estoy seguro de cómo cerrar cada archivo que he abierto. ¿Cómo cierro los archivos de tempfile.mkstemp?
Como mkstemp()
devuelve un descriptor de archivo sin procesar, puede usar os.close() :
import os
from tempfile import mkstemp
for n in xrange(1024 + 1):
f, path = mkstemp()
# Do something with ''f''...
os.close(f)
Use os.close()
para cerrar el descriptor de archivo:
import os
from tempfile import mkstemp
# Open a file
fd, path = mkstemp()
# Close opened file
os.close( fd )
import tempfile
import os
for idx in xrange(1024 + 1):
outfd, outsock_path = tempfile.mkstemp()
outsock = os.fdopen(outfd,''w'')
outsock.close()