Регистрация рабочие процессы с параллельным питоном

StackOverflow https://stackoverflow.com/questions/4005180

  •  25-09-2019
  •  | 
  •  

Вопрос

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

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

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

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

Это было полезно?

Решение

Один из способов решения вашей проблемы состоит в том, чтобы сделать следующее:

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

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

Другие советы

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top