我发现一个类的创作是不是类的实例方法要慢。
>>> from timeit import Timer as T
>>> def calc(n):
... return T("class Haha(object): pass").timeit(n)
<<After several these 'calc' things, at least one of them have a big number, eg. 100000>>
>>> calc(9000)
15.947055101394653
>>> calc(9000)
17.39099097251892
>>> calc(9000)
18.824054956436157
>>> calc(9000)
20.33335590362549
是啊,创造9000班用了16秒,而变得更慢的后续调用。
还有这个:
>>> T("type('Haha', b, d)", "b = (object, ); d = {}").timeit(9000)
给出了相似的结果。
但是实例不吃亏:
>>> T("Haha()", "class Haha(object): pass").timeit(5000000)
0.8786070346832275
5000000个实例在小于一秒钟。
是什么让创建这个贵吗?
为什么在创建过程变得慢一点吗?
编辑:
如何重现:
开始新的蟒过程中,初始数“计算(10000)” S给我的机器上的若干0.5。 并尝试一些较大的值,钙(100000),它不能在连10secs结束,中断它,钙(10000),给出了15秒。
编辑:
其他事实:
如果您GC.Collect的()后,“计算”变得缓慢,你可以在开始时的“正常”的速度,但时间将在随后的呼声越来越高
>>> from a import calc
>>> calc(10000)
0.4673938751220703
>>> calc(10000)
0.4300072193145752
>>> calc(10000)
0.4270968437194824
>>> calc(10000)
0.42754602432250977
>>> calc(10000)
0.4344758987426758
>>> calc(100000)
^CTraceback (most recent call last):
File "<stdin>", line 1, in <module>
File "a.py", line 3, in calc
return T("class Haha(object): pass").timeit(n)
File "/usr/lib/python2.7/timeit.py", line 194, in timeit
timing = self.inner(it, self.timer)
File "<timeit-src>", line 6, in inner
KeyboardInterrupt
>>> import gc
>>> gc.collect()
234204
>>> calc(10000)
0.4237039089202881
>>> calc(10000)
1.5998330116271973
>>> calc(10000)
4.136359930038452
>>> calc(10000)
6.625348806381226