Эффективно читать большой, активный файл журнала Python

1

Когда мой Python script записывает большое количество журналов в текстовый файл по строкам с помощью встроенной библиотеки протоколов Python, в моей программе Windows с поддержкой Delphi я хочу эффективно прочитайте все вновь добавленные журналы (строки).

  • Когда записывается сценарий Python в файл, моя программа для Windows будет сохраните дескриптор файла readonly. этот файл журнала;

  • Я использую Windows API для получения сообщается, когда файл журнала изменено; Как только файл будет изменен, он будет читать вновь добавленные строки.

Я новичок в Python, вы видите любую возможную проблему с этим подходом? Блокирует ли журнал регистрации Python весь журнал? Спасибо!

Теги:
logging
text-files

2 ответа

0
Лучший ответ

Как отметил ʇsәɹo, стандартный регистратор FileHandler не блокирует файл, поэтому он должен работать. Однако, если по какой-то причине вы не можете заблокировать файл, тогда я бы рекомендовал, чтобы ваше другое приложение открывало файл периодически, записывайте позицию, в которую он читает, и затем снова возвращайтесь к этой точке. Я знаю, что программа Linux DenyHosts использует этот подход при работе с файлами журналов, которые он должен отслеживать в течение длительного периода времени. В таких ситуациях просто блокировка невозможна, так как каталоги могут перемещаться, файл поворачивается и т.д. Хотя это и усложняет ситуацию, тогда вам нужно хранить имя файла + читать позицию в постоянном состоянии где-то.

  • 0
    Поскольку в программе EXE она должна показывать только что добавленные записи журнала в режиме реального времени, я боюсь, что закрытие и повторное открытие файла журнала вызовет узкое место в производительности.
1

Это зависит от используемого вами обработчика ведения журнала, но, как вы можете видеть из исходного кода, logging.FileHandler в настоящее время не работает создавать любые блокировки файлов. По умолчанию он открывает файлы в режиме "a" (добавление), поэтому, пока ваши вызовы Windows могут справиться с этим, вы должны быть в порядке.

  • 0
    Приятно знать это, спасибо!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню