作者Casval (卡斯巴爾)
看板Python
標題[問題] 如何使用固定長度的queue
時間Fri May 24 19:14:28 2013
Python新手虛心請教,我的目的是這樣的︰
從DB中取資料塞入Bars,如果len(Bars) > 100則移除最舊的第一筆資料。
但程式跑個二分鐘就開始很慢,記憶體耗用頗多。
請問是什麼地方出錯了?或是有較正規的作法?
Bars = []
def Run():
global Bars
.
.
.
row = chart.Next()
while row != None:
Bars.append(row)
if len(Bars) > 100:
Bars.pop(0)
main() # do something
row = chart.Next()
--
言論自由的目的不是通往真理,言論自由本身就是目的。
真理也不可能越辯越明,就如同兩杯50度C的水再怎麼攪和,
也不會變成100度C。所以,我們都需要學習。
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 210.209.142.12
※ 編輯: Casval 來自: 210.209.142.12 (05/24 19:15)
1F:→ Casval:我看到 deque 了.. 05/24 19:23
3F:→ Casval:不過,效能好像還是很不好耶..請問還有改善空間嗎? 05/24 19:25
4F:推 mantour:有試過把main拿掉嗎 先確定問題是不是出在main裡面 05/24 19:26
5F:→ mantour:也許是main裡面的運算複雜度過大 05/24 19:31
6F:→ Casval:有拿掉main()了,效能還是一樣,每秒增加10MB的記憶體使用 05/24 19:35
7F:→ Casval:chart.Next()應該沒有問題,在別的程式不會出現記憶體耗損 05/24 19:37
8F:→ Casval:但我也不敢武斷..請問有推薦的測試工具嗎? 05/24 19:39
9F:推 mantour:那把 Bars.append 和 if 也拿掉 純粹空跑chart.Next()呢 05/24 19:41
※ 編輯: Casval 來自: 210.209.142.12 (05/24 19:44)
10F:→ Casval:嗯,看起來可能是chart.Next()的問題.. 05/24 19:48
11F:→ Casval:這下有點傷腦筋.. 05/24 19:52
12F:→ Casval:先謝謝mantour大.. ^^ 05/24 19:55
13F:→ Casval:好像只要作cursor.execute(sql)就會一直增加記憶體使用.. 05/24 20:20
14F:→ Casval:連cursor.fetchall()都拿掉了,memory usage狂升是怎樣? 05/24 20:21
15F:→ Casval:把MySqldb換成pymysql,就把問題解決了!還可以用Python3.3 05/24 21:06
16F:→ Casval:再次謝謝mantour大幫忙解惑~ ^^ 05/24 21:06