我有一個接受時間序列數據的python服務器。現在我需要計算最後一分鐘的平均流量,輸出像90個樣本/分鐘。我目前正在使用一個Python列表來保存所有時間戳,並使用一種非常糟糕的方式(在我看來)來計算這個。代碼大致是這樣的:如何計算最後一分鐘的運行平均流量
class TrafficCalculator(object):
timestamps = []
def run():
while True:
# this gets one record of traffic
data = self.accept_data()
# get record's timestamp
timestamp = data.timestamp
# add to list
self.timestamps.append(timestamp)
# get the time one minute ago
minute_ago = timestamp - datetime.timedelta(minutes=1)
# find out the first index of the timestamp in the past that's within 1 minute
for i, t in enumerate(self.timestamp):
if t > minute_ago:
break
# see how many records are within last minute
result = len(self.timestamp[i:])
# throw away the earlier data
self.timestamp = self.timestamp[i:]
正如你所看到的,我必須爲每個記錄做到這一點,如果我的流量獲取激烈,性能更是苦不堪言。
有更好的數據結構或算法,我可以使用這個更高性能嗎?更進一步,如何編寫測試來驗證我的算法?謝謝!
爲什麼不使用類似[熊貓](HTTP: //pandas.pydata.org/pandas-docs/stable/timeseries.html)? – Bahrom
您是否嘗試過在每次打開函數時都勾選int,並且每分鐘清除一次?爲了測試你的課程,你所要做的就是創建一個腳本,用隨機數據破壞self.accept_data()。 –