Я читаю каждый файл 0.01sa, но я делаю это с
with open('file.txt','r') as FILE:
data = FILE.read()
, что должно быть в соответствии с официальной документацией, кроме способа открытия и закрытия файла.
В то же времяЯ записываю в один и тот же файл время от времени (2–20 с) тем же способом, но с флагом «w» - но из совершенно другого процесса Python
Примерно через 20 минут правильной работы я получаю эту ошибку
IOError: [Errno 24] Too many open files:
Я думаю, что это совершенно нелепая ошибка.Произошла одна интересная вещь, которую я вынужден упомянуть здесь.Поскольку это происходит в моем Raspberry Pi, и не было никаких причин ожидать этой ошибки, я не покрывал ошибки с LOG.Поэтому я попытался зарегистрировать ошибку, и произошло нечто странное:
while True:
...
#loop where I read every 0.01 a file, IOError of the reading file happens
...
except Exception as e: # log the IOEerror
with open('log_error.txt','w') as FILE: # Cacthes the error but triggers a new IOError
FILE.write(e)
После того, как произошла IOError, в Exception произошла новая ошибка, и вместо IOError чтения файла я получил IOError для регистрации ошибки в log_error.txt
Кто-нибудь знает, что происходит?Я не могу понять это, так как он падает после 20 минут до 2 часов (это означает, что минимально файл был открыт по крайней мере 20 * 60 / 0,01, и ошибки не возникает).Это просто работает, пока это не так.Спасибо за любой совет
РЕДАКТИРОВАТЬ - Код: У меня есть подписчик MQTT, который получает команды (запись в файл по пути: self.path_anim_current
)
if payload['request']=='write_in':
with open(self.path_anim_current,'w') as FILE:
FILE.write(payload['data'])
В другом процессеЯ пытаюсь поймать изменение в файле как можно быстрее - это цикл чтения 0,01 с, где я читаю файл в self.path_anim_current
Это фрагмент цикла чтения 0,01 с: PATH
= self.path_anim_current
with open(PATH,'r') as FILE:
ANIMATION = FILE.read()
if ANIMATION != '':
COMMAND = rc.process_json(str(ANIMATION))
with open(PATH,'w') as FILE:
FILE.write('') #**On reading the file I want to delete its content**
rc.process_json - это просто функция, которая загружает файл json с некоторыми настройками
чтение json стандартным образом
with open('path_to_some_config') as FILE:
DOCUMENT = json.load(FILE)