Регистрация рабочих процессов с помощью Parallel Python - PullRequest
2 голосов
/ 23 октября 2010

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

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

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

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

Ответы [ 2 ]

6 голосов
/ 03 ноября 2010

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

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

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

2 голосов
/ 03 ноября 2010

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...