python ulimit

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()