улучшить журнал хвоста Python, когда запись данных записывается за одну секунду - PullRequest
0 голосов
/ 17 сентября 2018

Я пишу метод для ведения журнала

например

def getTailLog(self):

    with open(self.strFileName, 'rb') as fileObj:
        pos = fileObj.seek(0, os.SEEK_END)

        try:

            while True:

                if self.booleanGetTailExit:
                    break

                strLineContent = fileObj.readline()
                if not strLineContent:
                    continue
                else:
                    yield strLineContent.decode('utf-8').strip('\n')
        except KeyboardInterrupt:
            pass

этот метод может завершить журнал, но задержит даже зависание, когда массивная запись данных в файл журнала за одну секунду

так как мне починить

Большое спасибо

1 Ответ

0 голосов
/ 17 сентября 2018

Если честно, я не совсем понимаю, что вы подразумеваете под delay even stuck when massive data writer into log file in one second.

Ваш код содержит цикл while, который потенциально может работать вечно.Похоже, ваш код ожидает добавления строки в конец файла self.strFileName.Проблема в том, что он не просто ждет.Он постоянно проверяет содержимое файла.Это так называемая операция с привязкой к процессору, которая может вызвать огромные задержки при чтении / записи в одном и том же процессе (по моему опыту, до 10 секунд для двоичного файла размером 100 КБ).Python имеет такое поведение из-за GIL (глобальной блокировки интерпретатора).

Чтобы решить вашу проблему, вы должны заменить во время реализации цикла другую - вы можете использовать расписание (по крайней мере, паузы между последовательными проверками) или подход, управляемый событиями (если вы знаете, когда в файл добавляются новые строки).

...