0
我正在處理事件數據(在本例中是USGS地震)。美國地質勘探局給你所有地震和更新的最後一小時或最後一天,每隔幾分鐘就會列出一次。 我需要每分鐘輪詢一次該列表並針對該列表中的新事件採取行動,但忽略那些我已採取行動的行爲。如何在Python 3中創建時間盒裝查找事件?
我可以輕鬆地創建,我添加新的地震事件,給它一個列表:
events = list()
for f in features:
event = [{
'name': 'usgs.earthquake.feature', # Time Series Name
'columns': ['id', 'long', 'lat', 'depth', 'mag', 'type'\
'magtype', 'tz', 'felt', 'place', 'status'\
'gap', 'dmin', 'rms', 'ids', 'title', 'types'\
'cdi', 'net', 'nst', 'sources', 'alert', 'time'\
'tsunami', 'code', 'sig'
], # Keys
'points': [[ f['id'],\
f['geometry']['coordinates'][0],\
f['geometry']['coordinates'][1],\
f['geometry']['coordinates'][2],\
f['properties']['mag'],\
f['properties']['type'],\
f['properties']['magType'],\
f['properties']['tz'],\
...
f['properties']['time'],\
f['properties']['tsunami'],\
f['properties']['code'],\
f['properties']['sig']
]] # Data points
}]
if event in events:
log.debug('Surpressing duplicate event id: %s', event[0]['points'][0][0])
else:
log.debug('Event data: %s', event)
events.insert(0, event)
handler.postEvent(event)
log.debug('Event Cache Count: %s', len(events))
那是一個聰明的辦法 - 通過這樣的一個列表構建查找? 如何最好地保留列表中的過去2小時或36小時,同時放棄較老的條目?
感謝您的建議。儘管id對於事件是唯一的,但事件可以用更新的更準確的信息進行更新,在這種情況下,我需要重新處理事件。這就是爲什麼我最初使用列表而不是基於id的詞典,所以我可以確定我剛收到的發佈的任何部分是否與緩存中的現有部分不同。然而,這意味着我無法將時間戳添加到傳入事件中,因爲它到達了我的終端,或者我無法再比較整個事件。 – fxstein 2015-02-07 16:28:35
我仍然會推薦使用字典。如果你有這個ID,你可以直接從字典中刪除事件,以防你收到一個更新的事件。比較一大堆參數和數據會更昂貴(CPU,內存),因此速度更慢。除了你想跟蹤更改,但是你仍然需要更好的邏輯。 – manuel 2015-02-07 16:31:45