Сообщить об ошибке.

Логирование/ведение журнала процессов в модуле multiprocessing

В модуле multiprocessing "из коробки" доступна некоторая поддержка логирования/ведения журнала процессов.

Обратите внимание, что модуль logging не использует разделяемые блокировки процесса, поэтому, в зависимости от типа обработчика, сообщения от разных процессов могут смешиваться.

multiprocessing.get_logger():

Функция multiprocessing.get_logger() возвращает регистратор, используемый модулем multiprocessing. При необходимости будет создан новый.

При первом создании регистратор имеет уровень logging.NOTSET и не имеет обработчика по умолчанию. Сообщения, отправленные этому регистратору, по умолчанию не передаются корневому регистратору.

Обратите внимание, что в Windows дочерние процессы наследуют только уровень регистратора родительского процесса - любые другие настройки регистратора не будут унаследованы.

multiprocessing.log_to_stderr():

Функция multiprocessing.log_to_stderr() выполняет вызов multiprocessing.get_logger(), но помимо возврата регистратора, созданного get_logger(), она добавляет обработчик, который отправляет вывод в sys.stderr в формате '[%(levelname)s/%(processName)s] %(message)s'.

Примеры логирования работы процессов:

Ниже приведен пример сеанса с включенным режимом ведением журнала. Полную таблицу уровней ведения журнала смотрите в модуле logging.

>>> import multiprocessing, logging
>>> logger = multiprocessing.log_to_stderr()
>>> logger.setLevel(logging.INFO)
>>> logger.warning('doomed')
# [WARNING/MainProcess] doomed
>>> m = multiprocessing.Manager()
# [INFO/SyncManager-...] child process calling self.run()
# [INFO/SyncManager-...] created temp directory /.../pymp-...
# [INFO/SyncManager-...] manager serving at '/.../listener-...'
>>> del m
# [INFO/MainProcess] sending shutdown message to manager
# [INFO/SyncManager-...] manager exiting with exitcode 0