[問題] 如何使用固定長度的queue

看板Python作者 (卡斯巴爾)時間12年前 (2013/05/24 19:15), 編輯推噓2(2014)
留言16則, 2人參與, 最新討論串1/1
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)

05/24 19:23, , 1F
我看到 deque 了..
05/24 19:23, 1F

05/24 19:25, , 3F
不過,效能好像還是很不好耶..請問還有改善空間嗎?
05/24 19:25, 3F

05/24 19:26, , 4F
有試過把main拿掉嗎 先確定問題是不是出在main裡面
05/24 19:26, 4F

05/24 19:31, , 5F
也許是main裡面的運算複雜度過大
05/24 19:31, 5F

05/24 19:35, , 6F
有拿掉main()了,效能還是一樣,每秒增加10MB的記憶體使用
05/24 19:35, 6F

05/24 19:37, , 7F
chart.Next()應該沒有問題,在別的程式不會出現記憶體耗損
05/24 19:37, 7F

05/24 19:39, , 8F
但我也不敢武斷..請問有推薦的測試工具嗎?
05/24 19:39, 8F

05/24 19:41, , 9F
那把 Bars.append 和 if 也拿掉 純粹空跑chart.Next()呢
05/24 19:41, 9F
※ 編輯: Casval 來自: 210.209.142.12 (05/24 19:44)

05/24 19:48, , 10F
嗯,看起來可能是chart.Next()的問題..
05/24 19:48, 10F

05/24 19:52, , 11F
這下有點傷腦筋..
05/24 19:52, 11F

05/24 19:55, , 12F
先謝謝mantour大.. ^^
05/24 19:55, 12F

05/24 20:20, , 13F
好像只要作cursor.execute(sql)就會一直增加記憶體使用..
05/24 20:20, 13F

05/24 20:21, , 14F
連cursor.fetchall()都拿掉了,memory usage狂升是怎樣?
05/24 20:21, 14F

05/24 21:06, , 15F
把MySqldb換成pymysql,就把問題解決了!還可以用Python3.3
05/24 21:06, 15F

05/24 21:06, , 16F
再次謝謝mantour大幫忙解惑~ ^^
05/24 21:06, 16F
文章代碼(AID): #1HdqkvCn (Python)
文章代碼(AID): #1HdqkvCn (Python)