Python 3.x — запись в один файл с многопроцессорной обработкойPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Python 3.x — запись в один файл с многопроцессорной обработкой

Сообщение Anonymous »


У меня есть класс Logger, который наследует Thread, и есть класс TestProcess, который наследует Process. Я пытаюсь использовать этот класс Logger в основном процессе, а также в TestProcess, однако регистрируются только журналы основного процесса. Эта проблема возникает, только если я пытаюсь использовать версию 3.x. Журналирование работает нормально с версией 2.7

Есть идеи, в чем может быть проблема? Публикация файлов для справки

Кроме того, я использую MacOS
########################## # Файл 1: main.py ########################## импортировать систему время импорта импортировать обратную трассировку из журнала импорта регистратора, Logger из процессов импорта процессов из test_process импортировать TestProcess защита print_some_text (менеджер): а не менеджер.exit.is_set(): log('Внутри print_some_text') время.сон(20) менеджер.wait_for_child_processes_to_exit() защита основной(): пытаться: logger_thread = Logger("final.log", "test_logs") logger_thread.start() log("main(): начало") Process_manager = Процессы (logger_thread) test_process_1 = TestProcess('процесс') process_manager.add_process(test_process_1) test_process_1.start() print_some_text(processes_manager) кроме исключения как e: журнал (traceback.format_exc()) sys.exit(1) если __name__ == '__main__': основной() ########################## # Файл 2:processes.py ########################## импортировать сигнал из журнала импорта регистратора, stop_logging из события многопроцессорного импорта Классовые процессы: def __init__(сам, регистратор): self.processes = [] self.exit = Событие() self.logger = регистратор signal.signal(signal.SIGINT, self.exit_graceful) сигнал.сигнал(сигнал.SIGTERM, self.exit_изящно) защита add_process(self, proc): self.processes.append(процедура) def exit_graceically (self, Signum, Frame): log(f"Завершение процессов. Signum: {signum}") для p в self.processes: п.терминировать() self.exit.set() защита wait_for_child_processes_to_exit (self): для p в self.processes: p.join() stop_logging() self.logger_thread.join() ########################## # Файл 3: test_process.py ########################## из многопроцессорного импорта Процесс, Событие время импорта импортировать обратную трассировку из журнала импорта регистратора класс TestProcess(Процесс): def __init__(я, имя): Process.__init__(сам) self._name = имя self.exit = Событие() защита запуска (сам): пытаться: а не self.exit.is_set(): log("Внутри test_process") время.сон(10) кроме исключения как e: журнал (traceback.format_exc()) защита завершения (сам): log("завершить test_process") self.exit.set() ########################## # Файл 4: logger.py ########################## журнал импорта из даты и времени импорта даты и времени из logging.handlers импортировать TimedRotatingFileHandler из очереди импорта многопроцессорной обработки из ОС импортировать getpid из потока импорта потока LOG_QUEUE = Очередь() класс Logger(Thread): def __init__(я, файл журнала, имя): Thread.__init__(сам) self._logger = logging.getLogger(имя) self._logger.setLevel(logging.INFO) обработчик = TimedRotatingFileHandler (файл журнала, когда = "полночь", интервал = 1, резервное копирование = 0) self._logger.addHandler(обработчик) self._syslog_open = Ложь защита запуска (сам): пока правда: запись = LOG_QUEUE.get() если запись Нет: перерыв self._log(запись) def _log(self, msg, level="INFO"): self._logger.log(20, сообщение) def log(msg, level="INFO"): если сообщение Нет: возвращаться LOG_QUEUE.put(запись) защита stop_logging(): LOG_QUEUE.put(нет)
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»