作者hl4 (Minimi)
看板Python
标题[闲聊] 效能问题
时间Mon Nov 19 23:58:58 2012
我最近写了一支文件处理的小程式
主要的内容大略是从一个固定格式的档案中读取几万笔数据转成图片
在处理单一档案的时候不会有什麽问题
但是当我把程式包装成class,再批次呼叫class来处理大约数千个档案的时候
就会看到每一笔的处理速度愈来愈慢
批次处理的方式很简单,大致如下:
class foo()
def __init__():
def blah():
if __name__ == "__init__":
for file in dir:
d = foo(file)
d.blah()
我试过加上d = None,希望能够促使python作资源回收,不过也没什麽用。
最後我是用bash来做这一段,似乎有点蠢,不知道有没有更好的方法。
谢谢。
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 114.137.234.128
1F:推 ya790206:用multiprocess呢? 你应该不需要等某件事做完才做某件事 11/20 00:11
2F:→ carlcarl:你应该观察一下慢是怎麽个慢法 是记忆体愈吃愈多吗? 11/20 04:39
3F:→ hl4:记忆体的使用数量没有持续增加,大多还是未使用的状态 11/20 10:16
4F:→ hl4:每一笔的处理时间递增太快,所以还没打算用multiprocess 11/20 10:20
5F:推 swpoker:变成图档是否卡在IO? 11/20 10:46
6F:→ hl4:图档生成卡IO应该是每笔处理都卡,平均拖慢每笔处理的时间吧? 11/20 10:51
7F:→ hl4:我的图档生成是在d.blah()做的 11/20 10:59
8F:推 swpoker:存取资料的方式卡住吗?例如第一个档案新增N万笔资料 11/20 12:29
9F:→ swpoker:第二个档案又新增数万笔资料~因此造成後续的处理成倍数 11/20 12:30
每一份档案的处理都是重新来过,所以不应该有这样的问题。
我稍微修改说明,希望有描述的清楚一些。
※ 编辑: hl4 来自: 140.116.39.124 (11/20 13:49)
※ 编辑: hl4 来自: 140.116.39.124 (11/20 13:50)
10F:推 darkgerm:用 python -m cProfile yourfile.py 试试瓶颈在哪? 11/20 14:05
11F:推 swpoker:os.system(你的py)~~如果效能符合预期~就是class出问题啦 11/21 11:28