Шаблон Python Observer: примеры, советы? [закрыто]

Существуют ли какие-либо примерные примеры GoF Observer, реализованного в Python? У меня есть битовый код, который в настоящее время содержит биты кода отладки, добавленные через класс ключей (в настоящее время генерирует сообщения в stderr, если установлен магический env) Кроме того, класс имеет интерфейс для постепенного возврата результатов, а также для их сохранения (в памяти) для последующей обработки. (Сам класс является менеджером заданий для одновременного выполнения команд на удаленных машинах через ssh).

В настоящее время использование класса выглядит примерно так:

job = SSHJobMan(hostlist, cmd)
job.start()
while not job.done():
    for each in job.poll():
        incrementally_process(job.results[each])
        time.sleep(0.2) # or other more useful work
post_process(job.results)

Модель использования предупреждений:

job = SSHJobMan(hostlist, cmd)
job.wait()  # implicitly performs a start()
process(job.results)

Это все отлично работает для текущей утилиты. Однако ему не хватает гибкости. Например, в настоящее время я поддерживаю краткий формат вывода или индикатор выполнения в качестве дополнительных результатов, я также поддерживаю краткий, полный и "объединенное сообщение выходы дляpost_process() функция.

Однако я'Я хотел бы поддерживать несколько потоков результатов / выходных данных (индикатор выполнения для терминала, отладка и предупреждения в файле журнала, выходные данные из успешных заданий в один файл / каталог, сообщения об ошибках и другие результаты из неуспешных заданий в другой и т. д.).

Это звучит как ситуация, которая вызывает Observer ... чтобы экземпляры моего класса принимали регистрацию от других объектов и вызывали их с определенными типами событий по мере их возникновения.

я смотрю наPyPubSub так как я видел несколько ссылок на это в связанных с этим вопросах. Я'я не уверен, что яЯ готов добавить внешнюю зависимость в мою утилиту, но я мог бы видеть ценность в использовании их интерфейса в качестве модели для моей, если это 'собирается облегчить для других использовать. (Проект предназначен как отдельная утилита командной строки и как класс для написания других скриптов / утилит).

Короче говоря, я знаю, как делать то, что я хочу ... но есть множество способов сделать это. Я хочу предложения о том, чтоСкорее всего, будет работать для других пользователей кода в долгосрочной перспективе.

Сам код находится по адресу:classh.

Ответы на вопрос(9)

Ваш ответ на вопрос