Шаблон 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.