但是,它确实缺乏灵活性。
好吧……实际上,如果您想要异步API,那么对我来说这似乎是一个不错的设计。通常是这样。也许您所需要的只是从stderr切换到Python的logging
模块,该模块具有自己的发布/订阅模型,Logger.addHandler()
以及诸如此类的东西。
如果您确实想支持观察者,我的建议是使其保持简单。您实际上只需要几行代码。
class Event(object):
pass
class Observable(object):
def __init__(self):
self.callbacks = []
def subscribe(self, callback):
self.callbacks.append(callback)
def fire(self, **attrs):
e = Event()
e.source = self
for k, v in attrs.iteritems():
setattr(e, k, v)
for fn in self.callbacks:
fn(e)
您的Job类可以子类化Observable
。发生感兴趣的事情时,请致电self.fire(type="progress", percent=50)
或类似电话。