Opened 13 years ago
Closed 12 years ago
#18154 closed Bug (fixed)
Too many open files.
Reported by: | Owned by: | Gabe Jackson | |
---|---|---|---|
Component: | File uploads/storage | Version: | 1.4 |
Severity: | Normal | Keywords: | |
Cc: | Triage Stage: | Accepted | |
Has patch: | no | Needs documentation: | yes |
Needs tests: | no | Patch needs improvement: | no |
Easy pickings: | no | UI/UX: | no |
Description
I'm doing a migration between two applications in django, everything was going normal until I got a class that has a field of type FileField. The import function normally to a given time in the system raises the following exception:
Original exception was:
Traceback (most recent call last): File "./manage.py", line 10, in <module> File "/usr/local/lib/python2.7/dist-packages/django/core/management/__init__.py", line 443, in execute_from_command_line File "/usr/local/lib/python2.7/dist-packages/django/core/management/__init__.py", line 382, in execute File "/usr/local/lib/python2.7/dist-packages/django/core/management/base.py", line 196, in run_from_argv File "/usr/local/lib/python2.7/dist-packages/django/core/management/base.py", line 232, in execute File "/home/eltonplima/workspace/ci/ci/migracao/management/commands/import_protocolo.py", line 291, in handle File "/home/eltonplima/workspace/ci/ci/migracao/management/commands/import_protocolo.py", line 139, in protocolo_relatorio_arquivo File "/home/eltonplima/workspace/ci/ci/migracao/protocolo/protocolos/models.py", line 168, in __unicode__ File "/usr/local/lib/python2.7/dist-packages/django/db/models/fields/files.py", line 46, in _get_file File "/usr/local/lib/python2.7/dist-packages/django/core/files/storage.py", line 33, in open File "/usr/local/lib/python2.7/dist-packages/django/core/files/storage.py", line 156, in _open IOError: [Errno 24] Too many open files: u'/home/eltonplima/workspace/ci/ci/media/uploads/estado_a/municipio_a/cliente_a/2010/03_marco/arquivo.pdf'
That is, django is opening each file but is not closing, so I'm forced to close it manually, in theory django should not automatically close the file?
My code:
conversoes = ArquivoProtocolo.objects.using('protocolo').all() if conversoes.count() > 0: for conversao in conversoes: ProtocoloRelatorioArquivo.objects.get_or_create( id=conversao.id, tipo_relatorio=TipoRelatorio.objects.get(id=conversao.tipo_relatorio.id), arquivo=conversao.arquivo, protocolo_relatorio=ProtocoloRelatorio.objects.get(id=conversao.protocolo_arquivo.id) ) conversao.arquivo.close()# This should really be necessary?
Change History (3)
comment:1 by , 12 years ago
Needs documentation: | set |
---|---|
Owner: | changed from | to
Triage Stage: | Unreviewed → Accepted |
comment:2 by , 12 years ago
comment:3 by , 12 years ago
Resolution: | → fixed |
---|---|
Status: | new → closed |
Note:
See TracTickets
for help on using tickets.
Generally this isn't an issue because you don't open thousands of files in a query. The file objects can be garbage collected and the file descriptors closed as soon as the request is finished.
Django can't close the files automatically because it doesn't know when you're done with the file. Specifically we can't use the context manager.
So I suppose it's just a gotcha we should document.