相关疑难解决方法(0)

Python中的事件系统

您使用什么Python事件系统?我已经知道了pydispatcher,但我想知道还能找到什么,或者是常用的?

我对作为大型框架一部分的事件管理器不感兴趣,我宁愿使用一个我可以轻松扩展的小型简单解决方案.

python events dispatcher event-handling

180
推荐指数
9
解决办法
20万
查看次数

Python观察者模式:示例,提示?

是否有在Python中实现的GoF Observer的示例性示例?我有一些代码,当前有一些调试代码通过密钥类(如果设置了魔法env,当前生成消息给stderr).此外,该类还有一个接口,用于递增返回结果以及存储它们(在内存中)以进行后期处理.(该类本身是一个作业管理器,用于通过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)
Run Code Online (Sandbox Code Playgroud)

一个易用的使用模型是:

job = SSHJobMan(hostlist, cmd)
job.wait()  # implicitly performs a start()
process(job.results)
Run Code Online (Sandbox Code Playgroud)

这一切都适用于当前的实用程序.但它确实缺乏灵活性.例如,我目前支持简短的输出格式或进度条作为增量结果,我还支持该post_process()功能的简短,完整和"合并消息"输出.

但是,我想支持多个结果/输出流(到终端的进度条,对日志文件的调试和警告,从成功作业到一个文件/目录的输出,错误消息以及从非成功作业到另一个作业的其他结果)等).

这听起来像是一个需要Observer的情况......我的类的实例接受来自其他对象的注册,并在发生时使用特定类型的事件回调它们.

我正在看PyPubSub,因为我在SO相关问题中看到了几个引用.我不确定我是否已经准备好将外部依赖项添加到我的实用程序中,但是我可以看到使用它们的接口作为我的模型的价值,如果这将使其他人更容易使用它.(该项目既可以作为独立的命令行实用程序,也可以作为编写其他脚本/实用程序的类).

总之,我知道如何做我想要的......但是有很多方法可以实现它.从长远来看,我想知道最有可能为代码的其他用户工作的建议.

代码本身位于:classh.

python design-patterns listener observer-pattern

43
推荐指数
5
解决办法
3万
查看次数

在python中实现观察者模式的替代方法

我正想通过后有关如何观察者模式可以在Python中实现.在同一篇文章中有这些评论.

1)在python中你也可以只使用普通函数,"观察者"类并不是真正需要的.

2)这是Java程序员在切换到Python后尝试做的很好的例子 - 他们觉得Python缺少所有垃圾并尝试"移植"它.

这些注释暗示观察者模式在python中并不真正有用,并且存在其他方法来实现相同的效果.这是真的,如果能做到这一点?

这是观察者模式的代码:

class Observable(object):

    def __init__(self):
        self.observers = []

    def register(self, observer):
        if not observer in self.observers:
            self.observers.append(observer)

    def unregister(self, observer):
        if observer in self.observers:
            self.observers.remove(observer)

    def unregister_all(self):
        if self.observers:
            del self.observers[:]

    def update_observers(self, *args, **kwargs):
        for observer in self.observers:
            observer.update(*args, **kwargs)

from abc import ABCMeta, abstractmethod

class Observer(object):
    __metaclass__ = ABCMeta

    @abstractmethod
    def update(self, *args, **kwargs):
        pass

class AmericanStockMarket(Observer):
    def update(self, *args, **kwargs):
        print("American stock market received: {0}\n{1}".format(args, kwargs))

class EuropeanStockMarket(Observer):
    def …
Run Code Online (Sandbox Code Playgroud)

python first-class-functions observer-pattern

4
推荐指数
1
解决办法
918
查看次数

使用装饰器在 Python3 中实现观察者模式

这个问题一般与观察者模式无关。它专注于在该模式中使用装饰器。该问题基于类似问题的答案

#!/usr/bin/env python3

class Observable:
    """
        The object that need to be observed. Alternative names are 'Subject'.
        In the most cases it is a data object.
    """
    def __init__(self):
        self._observers = []

    def register_observer(self, callback):
        self._observers.append(callback)
        return callback

    def _broadcast_observers(self, *args, **kwargs):
        for callback in self._observers:
            callback(*args, **kwargs)


class TheData(Observable):
    """
        Example of a data class just for demonstration.
    """
    def __init__(self, data):
        Observable.__init__(self)
        self._data = data

    @property
    def data(self):
        return self._data

    @data.setter
    def data(self, data):
        self._data = …
Run Code Online (Sandbox Code Playgroud)

python python-3.x observer-pattern python-decorators

1
推荐指数
1
解决办法
3349
查看次数