作者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