相关疑难解决方法(0)

为什么在Python中创建一个类比实例化一个类要慢得多?

我发现类的创建比实例化类慢.

>>> 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
Run Code Online (Sandbox Code Playgroud)

是的,创建9000个类需要16秒,并且在后续调用中变得更慢.

还有这个:

>>> T("type('Haha', b, d)", "b = (object, ); d = {}").timeit(9000)
Run Code Online (Sandbox Code Playgroud)

给出类似的结果.

但实例化不会受到影响:

>>> T("Haha()", "class Haha(object): pass").timeit(5000000)
0.8786070346832275
Run Code Online (Sandbox Code Playgroud)

在不到一秒的时间内完成5000000个实例.

是什么让这个创作变得昂贵?

为什么创作过程会变慢?

编辑:

如何重现:

开始一个新的python进程,最初的几个"calc(10000)"在我的机器上给出了0.5的数字.并尝试一些更大的值,calc(100000),它甚至不能以10秒结束,中断它,并且计算(10000),给出15秒.

编辑:

其他事实:

如果你在'calc'变慢后gc.collect(),你可以在开始时获得'正常'的速度,但是后续调用的时间会增加

>>> from a import calc
>>> …
Run Code Online (Sandbox Code Playgroud)

python performance memory-management class

28
推荐指数
3
解决办法
6625
查看次数

Python 3中的类实例化比Python 2慢

我偶然注意到,在Python 2.7和3.5中,从大型数据文件生成类的简单程序运行速度要快得多.我在这里读到,使用"无限精度"整数归咎于简单枚举的减速,但即使我尝试实例化这个类的简单测试,我发现Python 3明显变慢:

class Benchmark(object):
    def __init__(self):
        self.members = ['a', 'b', 'c', 'd']


def test():
    test = Benchmark()

if __name__ == '__main__':
    import timeit
    print(timeit.timeit("test()", setup="from __main__ import test"))
Run Code Online (Sandbox Code Playgroud)

我想也许这与每个类实例的大小有关,但Python 3实例小于2(56对64)

$python3 benchmarks.py
0.7017288669958361
$python benchmarks.py
0.508942842484
Run Code Online (Sandbox Code Playgroud)

我已尝试过很多关于这个主题的变体,包括在不同的机器上使用3.4,并且仍然得到相同的结果.有什么想法发生了什么?

python class instance python-3.x

5
推荐指数
1
解决办法
323
查看次数