看板 Python 關於我們 聯絡資訊
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)
Casval:我看到 deque 了.. 05/24 19:23
Casval:不過,效能好像還是很不好耶..請問還有改善空間嗎? 05/24 19:25
mantour:有試過把main拿掉嗎 先確定問題是不是出在main裡面 05/24 19:26
mantour:也許是main裡面的運算複雜度過大 05/24 19:31
Casval:有拿掉main()了,效能還是一樣,每秒增加10MB的記憶體使用 05/24 19:35
Casval:chart.Next()應該沒有問題,在別的程式不會出現記憶體耗損 05/24 19:37
Casval:但我也不敢武斷..請問有推薦的測試工具嗎? 05/24 19:39
mantour:那把 Bars.append 和 if 也拿掉 純粹空跑chart.Next()呢 05/24 19:41
※ 編輯: Casval 來自: 210.209.142.12 (05/24 19:44)
Casval:嗯,看起來可能是chart.Next()的問題.. 05/24 19:48
Casval:這下有點傷腦筋.. 05/24 19:52
Casval:先謝謝mantour大.. ^^ 05/24 19:55
Casval:好像只要作cursor.execute(sql)就會一直增加記憶體使用.. 05/24 20:20
Casval:連cursor.fetchall()都拿掉了,memory usage狂升是怎樣? 05/24 20:21
Casval:把MySqldb換成pymysql,就把問題解決了!還可以用Python3.3 05/24 21:06
Casval:再次謝謝mantour大幫忙解惑~ ^^ 05/24 21:06