Я планирую передать скрипт кода пользователя на журнал python, запустить его с помощью python bdb, а затем зарегистрировать вывод в файле.Python IOError: [Errno 24] Слишком много открытых файлов
Вот мой код в питона регистраторе:
try:
logger._runscript(script_str)
except bdb.BdbQuit:
pass
finally:
logger.finalize(filename)
где logger.finalize определяется ниже как функции финализации (выход, имя файла).
Отель BDB будет порождать новый поток и вызвать следующую функцию финализации после выполнения:
def finalizer(output, filename):
outfile = open(filename , 'a')
outfile.write(json.dumps(output, indent = 4))
outfile.close()
Здесь выход результат выполнения, и мы будем писать его в файл с именем файла.
Я проверил три строки в функции финализатора, и они прошли нормально.
Однако, когда они были вызваны из питона регистратору, я всегда получаю следующее сообщение об ошибке:
IOError: [Errno 24] Too many open files: filename
Я открыт только один файл, добавить строку к своему концу, а затем закройте его. Почему существует «слишком много открытых файлов»? Может ли кто-нибудь указать мне на проблему?
Вот информация TraceBack:
Traceback (most recent call last):
File "./exec.py", line 95, in <module>
File "./exec.py", line 82, in main
File "./exec.py", line 45, in run
File "path to project/logger.py", line 1321, in exec_script_str
File "path to project/logger.py", line 1292, in finalize
File "./exec.py", line 24, in finalizer
IOError: [Errno 24] Too many open files: 'test01.py'
Можете ли вы показать весь трассу? – user2357112
Добавлена информация о TraceBack, строка 24 в exec.py указывает на outfile = open (имя файла, 'a'). Я подозреваю, что проблема в pdb-потоке не может открыть/закрыть файл должным образом? Заранее спасибо! –
Возможно, вам захочется проверить другие места, в которых ваша программа открывает файлы. Возможно, это не источник утечки. – user2357112