Регистрация рабочие процессы с параллельным питоном
-
25-09-2019 - |
Вопрос
Я унаследовал содержание некоторых научных вычислений с использованием параллельного питона на кластере. С Parallel Python задания подаются в Pserserver, который (в данном случае) переговоры с уже запущенными процессами PPSERVER на других компьютерах, сгибание задач к процессам PPWorkers.
Я хотел бы использовать стандартный модуль ведения журнала библиотеки для журнала ошибок и отладки информации из функций, которые отправляются в PPSERVER. Поскольку эти PPWorkers работают как отдельные процессы (на отдельных компьютерах), я не уверен, как правильно структурировать журнал. Должен ли я войти в отдельный файл для каждого процесса? Может быть, есть обработчик журнала, который сделал бы все лучше?
Кроме того, я хочу, чтобы сообщить о том, какой процесс на каком компьютере ударил ошибку, но код, который я пишу журналом, вероятно, не знает об этих вещах; Может быть, это должно происходить на уровне PPSERVER?
(Версия вопроса поперечно размещена на параллельных форумах Python, я выложу ответ здесь, если я получу что-то там от не так пользователя)
Решение
Один из способов решения вашей проблемы состоит в том, чтобы сделать следующее:
- В каждом процессе работника используйте
logging.handlers.SocketHandler
отправлять мероприятия от работника до выделенного процесса регистратора. - Создайте выделенный процесс регистратора, который слушает для регистрации событий на сокете, на основе рабочего примера, приведенного в документах в https://docs.ython.org/3/howto/logging-cookbook.html#sending-and-reciving-logging-events-across-Atractwork
- Выгода ;-)
Если вы загорелись исключения в рабочих функциях и входите в систему, то вы сможете получить видимость ошибок во всех работниках в одном месте.
Другие советы
Я бы использовал Python's logging
а также socket
Апис Просто следуйте примеру здесь.
Просто начать А. ppworker
посвященный вошедшему входа в систему, и создать новый logging.Logger
в каждом из других работников с logging.SocketHandler
Указание имени хоста и порта машины, запущенного журналом ppworker
.
Если у вас работает сервер системного журнала, вы также можете использовать Python's syslog
модуль, который документирован здесь.