Регистрация рабочих процессов с помощью Parallel Python

Я унаследовал некоторые научные вычисления с использованием Parallel Python в кластере. В Parallel Python задания передаются на ppserver, который (в данном случае) общается с уже запущенными процессами ppserver на других компьютерах, передавая задачи процессам ppworkers.

Я хотел бы использовать стандартный модуль ведения журнала библиотеки для регистрации ошибок и отладки информации из функций, которые передаются на ppserver. Поскольку эти ppworkers работают как отдельные процессы (на отдельных компьютерах), я не уверен, как правильно структурировать ведение журнала. Должен ли я войти в отдельный файл для каждого процесса? Может быть, есть обработчик журнала, который сделает все это лучше?

Кроме того, мне нужны отчеты о том, какой процесс на каком компьютере обнаружил ошибку, но код, в который я пишу вход, вероятно, не знает об этих вещах; может быть, это должно происходить на уровне ppserver?

(Версия вопроса, размещенная на форумах Parallel Python, я опубликую здесь, если получу что-то от пользователя, не являющегося SO)

2 ответа

Решение

Один из способов решить вашу проблему - сделать следующее:

  1. В каждом рабочем процессе используйте logging.handlers.SocketHandler отправлять события от рабочего к выделенному процессу регистрации.
  2. Создайте специальный процесс ведения журнала, который будет прослушивать события в сокете, основываясь на рабочем примере, приведенном в документации по адресу https://docs.python.org/3/howto/logging-cookbook.html
  3. Прибыль;-)

Если вы перехватываете исключения в своих рабочих функциях и записываете их в журнал, то вы сможете увидеть ошибки всех работников в одном месте.

Я бы использовал Python logging а также socket API-интерфейсы. Просто следуйте примеру здесь.

Просто начните ppworker посвященный регистрации где-то, и создать новый logging.Logger в каждом из других работников с logging.SocketHandler указав имя хоста и порт компьютера, на котором запущено ведение журнала ppworker,

Если у вас работает сервер системного журнала, вы также можете использовать Python syslog модуль, который задокументирован здесь.

Другие вопросы по тегам