我不确定如何重构我的应用程序。我读过一些关于 ChainedDefered 的内容,但我不知道如何将这项技术应用于我的情况。欢迎任何指针/建议。
我正在使用第三方库来监控一些实时变化非常迅速的外部数据源。每当检测到更改时,库都会在我的代码中调用回调函数。我的回调函数将依次从数据库中检索数据并执行一些处理。
class MyApp(object):
def start(self):
for i in range(1, 1000):
mycallback = CallBackHandler(x, y, z)
thirdPartyLib.subscribe(event_name + str(i), mycallback)
reactor.start()
class CallBackHandler(object):
def __init__(self, x, y, z):
....
def getSomeDataAndDoSomething(self):
...
def __call__(self)
callLater(self.getSomeDataAndDoSomething)
问题是当事件在很短的时间间隔内快速发生时,CallBackHandler 可以连续多次调用。如果这些回调或多或少同时执行,它们将产生相同的结果。
如果最后一个回调已完成处理,我如何触发回调?我更喜欢使用twisted中提供的构造来实现它,而不是说,通过比较事件的时间戳(所以如果它在1秒前被触发,则删除回调)或全局变量作为标志。