0
我有一個用戶界面,它從服務接收異步通知,提示它重新讀取數據庫中的信息。異步通知包含可用於檢索修改記錄的主鍵。在負載下,我可能會每秒收到10或15個通知,但通常會有重複的ID。就像這樣:限制更新頻率/清除更新緩存
{u'callback': u'job.modify', u'job-id': 1090, u'timestamp': u'2012-01-26 09:50:04.766'}
{u'callback': u'job.modify', u'job-id': 1091, u'timestamp': u'2012-01-26 09:50:04.767'}
{u'callback': u'job.modify', u'job-id': 1090, u'timestamp': u'2012-01-26 09:50:04.780'}
{u'callback': u'job.modify', u'job-id': 1091, u'timestamp': u'2012-01-26 09:50:04.808'}
{u'callback': u'job.modify', u'job-id': 1090, u'timestamp': u'2012-01-26 09:50:04.812'}
{u'callback': u'job.modify', u'job-id': 1090, u'timestamp': u'2012-01-26 09:50:04.829'}
{u'callback': u'job.modify', u'job-id': 1088, u'timestamp': u'2012-01-26 09:50:04.831'}
{u'callback': u'job.modify', u'job-id': 1088, u'timestamp': u'2012-01-26 09:50:04.836'}
{u'callback': u'job.modify', u'job-id': 1091, u'timestamp': u'2012-01-26 09:50:04.846'}
在這種情況下跳過一些數據庫讀取似乎是值得的。我正在和一個班級合作,所以我的想法是配置某種刷新間隔。這是我到目前爲止有:
class myClass():
def __init__(self):
self.modified = set([])
self.lastrefresh = datetime.datetime.now()
self.refreshinterval = datetime.timedelta(milliseconds = 250)
def onModify(self, data):
self.modified.add(data['job-id'])
if datetime.datetime.now() - self.lastrefresh < self.refreshinterval:
return
self.doModify()
def doModify():
ids = list(self.modified)
self.lastrefresh = datetime.datetime.now()
self.modified.clear()
其中一期工程(主要是),但攜帶有遺留下來的一些更新的潛力。因爲這些更新是異步收到的,所以我不知道它們會出現多少次或多久。任何待處理的刷新都會在下一次通知中處理,但是如果下一次通知沒有及時到達,那麼id將位於修改後的集合中,比我想要的250ms間隔長得多。任何建議,非常感謝。