【发布时间】:2012-11-24 13:33:30
【问题描述】:
我知道这听起来很重,但我正在尝试解决一个假设的情况。想象一下,您有 N 个对象的观察者。每个人都对对象状态感兴趣。当应用Observer Pattern 时,observable 对象倾向于遍历其观察者列表,调用观察者notify()|update() 方法。
现在想象一个特定的观察者对 observable 对象的状态有很多工作要做。例如,这会减慢最后一次通知的速度。
因此,为了避免减慢向所有观察者的通知速度,我们可以做的一件事是在单独的线程中通知观察者。为了让它工作,我想每个观察者都需要一个线程。为了避免因繁重的工作而导致通知速度变慢,这是我们正在承受的痛苦开销。如果使用线程方法,比放慢速度更糟糕的是无限循环导致的死线程。阅读有经验的程序员对于这个来说会很棒。
- 在设计问题上有多年经验的人是怎么想的?
- 这是一个没有实质性解决方案的问题吗?
- 真的是个坏主意吗?为什么?
示例
这是一个模糊的例子,目的是为了演示并希望澄清我什至没有测试过的基本想法:
class Observable(object):
def __init__(self):
self.queues = {}
def addObserver(self, observer):
if not observer in self.queues:
self.queues[observer] = Queue()
ot = ObserverThread(observer, self.queues[observer])
ot.start()
def removeObserver(self, observer):
if observer in self.queues:
self.queues[observer].put('die')
del self.queues[observer]
def notifyObservers(self, state):
for queue in self.queues.values():
queue.put(state)
class ObserverThread(Thread):
def __init__(self, observer, queue):
self.observer = observer
self.queue = queue
def run(self):
running = True
while running:
state = self.queue.get()
if state == 'die':
running = False
else:
self.observer.stateChanged(state)
【问题讨论】:
标签: multithreading observer-pattern