Сделать прогресс бар или логирование для отслеживания процесса программы

Содержание

В этом руководстве мы изучим основы стандартного модуля логирования в Python.

Что такое логирование в Python?

Logging в Python- это модуль в стандартной библиотеке, который обеспечивает возможность работы со средой для выпуска сообщений журнала из программ Python. Логирование используется для отслеживания событий, происходящих при запуске программного обеспечения.

Этот модуль широко используется разработчиками при работе с логами. Это очень важный инструмент, который используется при разработке, запуске и отладке программного обеспечения. Логирование полезно для хранения записей журнала. Предположим, что запись в журнале отсутствует, а программа прерывается во время своего выполнения, мы не сможем найти истинную причину проблемы.

Каким-то образом мы обнаруживаем причину сбоя, но на ее устранение уйдет много времени. Используя ведение журнала, мы можем оставить “следы”, чтобы, если проблема возникла в программе, мы могли легко найти причину проблемы.

Как работает регистрация

Logging – мощный модуль, используемый как новичками, так и профессионалами. Этот модуль обеспечивает навыки для организации различных обработчиков элементов управления и передачи сообщений журнала этим обработчикам.

Делаем Progress Bar на Python. Решение задач для начинающих в реальном времени #3

Чтобы выпустить сообщение журнала, нам нужно импортировать модуль ведения журнала следующим образом.

import logging

Теперь мы вызовем средство логирования, чтобы записывать сообщения, которые мы хотим видеть. Модуль регистрации предлагает пять уровней, определяющих серьезность событий. Каждое событие содержит параллельные методы, которые можно использовать для регистрации событий на уровне серьезности. Давайте разберемся в следующих событиях и их работе.

  1. ОТЛАДКА – используется для предоставления подробной информации и использования ее только при диагностике проблем.
  2. ИНФОРМАЦИЯ – предоставляет информацию о том, что все работает так, как мы хотим.
  3. ПРЕДУПРЕЖДЕНИЕ – используется, чтобы предупредить, что что-то произошло неожиданно, или мы столкнемся с проблемой в ближайшее время.
  4. ОШИБКА – используется, чтобы сообщить, когда у нас возникли серьезные проблемы, что программное обеспечение не выполнило некоторые программы.
  5. КРИТИЧЕСКАЯ ОШИБКА – указывает на серьезную ошибку, сама программа может не работать.
Читайте также:
Виды расчетов в программе 1 с

Вышеуказанных уровней достаточно для решения любых проблем. Соответствующие числовые значения уровней приведены ниже.

Уровень Числовые значения
NOTSET
DEBUG 10
INFO 20
WARNING 30
ERROR 40
CRITICAL 50

Модуль регистрации предлагает множество функций. Он состоит из нескольких констант, классов и методов. Константы представлены последними заглавными буквами; классы обозначаются заглавными буквами. Элементы в нижнем регистре представляют методы.

Индикатор прогресса в Python / ТОП 3 Библиотеки для создания Progress Bar

Давайте посмотрим на несколько объектов регистратора, предлагаемых самим модулем.

  • Logger.info(msg): используется для регистрации сообщения с уровнем INFO в этом регистраторе.
  • Logger.warning(msg): используется для регистрации сообщения с уровнем WARNING.
  • Logger.error(msg): используется для уровня ERROR.
  • Logger.critical(msg): регистрация уровня CRITICAL на этом регистраторе.
  • Logger.log(lvl, msg): для записи сообщения с целочисленным уровнем lvl.
  • Logger.exception(msg): для сообщения с уровнем ERROR на этом регистраторе.
  • Logger.setLevel(lvl): необходим для установки начала этого регистратора на lvl. Он проигнорирует все сообщения, написанные ниже.
  • Logger.addFilter(filter): используется для добавления определенного фильтра filter к этому регистратору.
  • Logger.removeFilter(filter): используется для удаления определенного фильтра filter.
  • Logger.filter(запись): ставит фильтр регистратора на запись. Если запись доступна и подлежит обработке, возвращается True. В противном случае он вернет False.
  • Logger.addHandler(hdlr): используется для добавления определенного обработчика hdlr к этому регистратору.
  • Logger.removeHandler(hdlr): необходим для исключения определенного обработчика hdlr.
  • Logger.hasHandlers():нужен для проверки того, содержит ли регистратор какой-либо настроенный обработчик или нет.

Давайте разберемся в следующем примере.

import logging logging.debug(‘The debug message is displaying’) logging.info(‘The info message is displaying’) logging.warning(‘The warning message is displaying’) logging.error(‘The error message is displaying’) logging.critical(‘The critical message is displaying’)
WARNING:root:The warning message is displaying ERROR:root:The error message is displaying CRITICAL:root:The critical message is displaying

Как видно из вышеприведенного вывода, каждое сообщение отображается вместе с корнем, который представляет собой имя модуля ведения журнала, присвоенное его регистратору по умолчанию. Сообщение и имя уровня разделяются двоеточием(:) и печатают сообщения в формате вывода по умолчанию.

Python-сообщество

[RSS Feed]

  • Начало
  • » GUI
  • » Прогресс бар для процесса парсинга *.log файла

#1 Апрель 5, 2016 07:22:26

Прогресс бар для процесса парсинга *.log файла

Приветствую дорогие друзья. Пишу небольшую программку с графическим интерфейсом по парсингу *.log — файла. Файл имеет объём от 30 Гб. Так вот, не могу придумать, как к процессу парсинга прикрутить прогресс бар. Как вести отсчёт?Подкиньте идей пожалуйста.

#2 Апрель 5, 2016 07:59:54

Прогресс бар для процесса парсинга *.log файла

если файл 30 гиг — то полагаю делать привязку к количеству строк не стоит! пока посчитает — заснем.
Предлагаю разбивать файл на кусочки и обрабатывать их после обработки каждого увеличивать переменную счетчика и выводить ее уже в удобном виде.

Читайте также:
Как называется программа которая показывает температуру

Влодение рускай арфаграфией — это как владение кунг-фу: настаящие мастира не преминяют ево бес ниабхадимости

#3 Апрель 5, 2016 08:05:39

Прогресс бар для процесса парсинга *.log файла

ZerG, т.е. на кусочки? Предварительно разбить перед парсингом файл, допустим, на 4 части и по мере окончания файлов считать прогресс бар?

#4 Апрель 5, 2016 08:15:01

Прогресс бар для процесса парсинга *.log файла

Да! На форуме даже есть пример как делать! Кроме того куски файла мона обрабатывать в потоках что сократит время обработки!
Но вам бы я предложил разбивать не на 4 части а скажем 100. Вот вам и 100 процентный тулбар (ето при условии что у вас файл всегда 30 гиг) а то если на 100 частей разбить текстовый документ их трех слов…..

Влодение рускай арфаграфией — это как владение кунг-фу: настаящие мастира не преминяют ево бес ниабхадимости

#5 Апрель 5, 2016 08:23:21

Прогресс бар для процесса парсинга *.log файла

Фишка в том, что файл по размеру может варьироваться. Т.е. это пока 32 Гб, а там может быть и больше. Это же log прокси. Но идея со 100 файлами мне понравилась. Так-то у меня и сам парсинг идёт в отдельном потоке, а в другом GUI.

Но с этим только недавно разобрался.

#6 Апрель 5, 2016 09:05:33

Прогресс бар для процесса парсинга *.log файла

Ну так — в чем пролема то ? Узнать размер файла — одна строка!
Да и в целом при разбивке на 100 частей вам всеравно сколько будет в итоге весить файл 300 метров или 500

Влодение рускай арфаграфией — это как владение кунг-фу: настаящие мастира не преминяют ево бес ниабхадимости

#7 Апрель 5, 2016 09:05:54

Прогресс бар для процесса парсинга *.log файла

Может проще — по объему файла? Не важно файл обрабатывается кусками или построчно — сделать счетчик N количества обработанных байт. Размер файла N узнается заранее. N / M * 100% и есть ваш прогресс.

_________________________________________________________________________________
полезный блог о python john16blog.blogspot.com

#8 Апрель 5, 2016 09:59:37

Прогресс бар для процесса парсинга *.log файла

Кстати можно тогда уже и градацию добавить!
Мол если файлик меньше 100 метров делить на 10 итд

Влодение рускай арфаграфией — это как владение кунг-фу: настаящие мастира не преминяют ево бес ниабхадимости

#9 Апрель 5, 2016 10:39:30

Прогресс бар для процесса парсинга *.log файла

ZerG
речь идет о лог файле, который , я уверен, текстовой, в котором целевая порция информации для обработки заключена в строке (т.е. отделенных символом переноса строки). И автор желает обрабатывать такой файл построчно. Проблема подхода с разбиением файлов заключена в том, что делая file_obg.read(n_count_of_bytes) получаем кусок данных в котором не содержится челое количество строк.

Читайте также:
Как сменить отчетный год в программе налогоплательщик

Т.е. если данный фрагмент разбить на строки, то на границе этого фрагмента мы не получим законченную строку, которая осталась в следующей порции данных. А значит ее нельзя достоверно обработать. ЧТо бы решить эту проблему нужно усложнить логику кода, что бы он мог эту не законченную строку закончить со следующей порцией данных.
Если все это делать только ради прогресс бара — нерационально.

_________________________________________________________________________________
полезный блог о python john16blog.blogspot.com

#10 Апрель 5, 2016 12:11:49

Прогресс бар для процесса парсинга *.log файла

Суть задачи объясню, чтобы картинка получилась. Есть log файл с прокси. Есть пользователи. Мне поступила задача, нужно сделать так, чтобы на выходе получился точно такой же лог файл, но уже без пользователя(пользователей), которого я выбрал. Выбор пользователя осуществляю чекбоксом в окне. Далее формирую список из пользователей(либо один пользователь) и нажимаю парсинг кнопку.

Каждый элемент списка сравнивается с конкретной строкой на вхождение в неё(т.е. есть ли пользователь конкретный в этой строке). Если пользователя в строке нет, то эту строчку копируем в другой файл, иначе оставляем в этом лог файле. На выходе получаем, что есть обычный log файл и пропарсеный. Так вот, пропарсенный всегда будет иметь меньший размер, чем оригинал, в зависимости сколько пользователей надо удалить. Исходя из того, что в среднем время парсинга файла размером 10Гб на одного пользователя занимает 450 — 470 сек., то хотелось бы прогресс бар сделать.

Источник: python.su

Python-сообщество

[RSS Feed]

  • Начало
  • » GUI
  • » Прогресс бар для процесса парсинга *.log файла

#1 Апрель 5, 2016 13:44:49

Прогресс бар для процесса парсинга *.log файла

можете привязаться к количеству пользователей.
Но всеравно идея дикая.
Тогда уже проще пропарсить файл на колисетсво вхождений заданного пользователя и от полчуенного числа минусовать каждое удаление — вот вам и прогрес бар! но ето здорово добавит время на общую обработку!
Вобще не понятна суть вашего приложения если можно прямо в консоли ожной командой sed это сделать без гимора

Влодение рускай арфаграфией — это как владение кунг-фу: настаящие мастира не преминяют ево бес ниабхадимости

#2 Апрель 5, 2016 13:51:15

Прогресс бар для процесса парсинга *.log файла

Возможно, но задача стоит именно такая, пропарсить.

#3 Апрель 5, 2016 13:57:37

Прогресс бар для процесса парсинга *.log файла

если выборки приходиться делать часто — то надо переносить это дело в SQL базу данных типа MySQL, PostgSQL. Работа в разы должна быть быстрее. Пополнение БД новыми записями на основе того же log файла задача не сложная.

_________________________________________________________________________________
полезный блог о python john16blog.blogspot.com

Источник: python.su

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru