データベースから情報を再読み込みするように求めるサービスから非同期通知を受け取るユーザーインターフェイスがあります。非同期通知には、変更されたレコードの取得に使用できる主キーが含まれています。読み込み中は、1秒間に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が必要な250ミリ秒よりもずっと長く置かれます。どんな提案も大変ありがとうございます。