在使用Python中,import是非常非常常用的。
那它性能怎么样呢?今天就想测测Python的import性能。
首先,我这种测试,肯定不怎么准,充其量只能提供个参照,大家看看,就图一个乐呵吧。
● linux下,用time.time()进行的测试
因为赋值操作是语言的最基础操作,所以以赋值操作作为基准,做对比。
▲首先,确定赋值操作(a=1)的时间消耗:
3.09944152832e-06 (0.000003 s)
▲然后,我们来做一下import的测试: 1,如果导入某个自定义模块的py文件: <module 'core.user' from '/opt/A-Socket/core/user.py'>
0.00202393531799 (平均0.002s) ▲导入导入某个自定义模块的pyc文件: <module 'core.user' from '/opt/A-Socket/core/user.pyc'> 0.000988006591797 (导入pyc,速度快了一倍。平均0.001s )
▲把自定义模块放在Python的安装目录下: <module 'user' from '/usr/local/lib/python2.6/user.pyc'> 0.000210046768188 (提高了一个数量级!我没看错吧!)
▲导入系统自带的os模块os.pyc: 5.96046447754e-06 (为什么导入os模块,速度如此惊人呢?!) ▲导入系统自带的socket模块socket.pyc <module 'socket' from '/usr/local/lib/python2.6/socket.pyc'> 0.00739884376526 (导入socket模块pyc)
▲导入第三方模块: <module 'setuptools' from '/usr/local/lib/python2.6/site-packages/setuptools-0.6c11-py2.6.egg/setuptools/__init__.py'> 0.0939381122589 (这个速度,也算可以接受) ▲导入第三方模块: twisted.internet.protocol.Protocol 0.144118070602 (导入twisted这个第三方模块很耗性能啊……)
——————————————————————————————— ● windows下,用time.clock()进行的测试
▲首先,确定赋值操作的时间消耗: 1.56498194252e-006
▲导入系统自带的os模块os.pyc: <module 'os' from 'c:/python25/lib/os.pyc'> 5.10494109683e-006 (可以看出与Linux的速度几乎相同)
▲导入导入某个自定义模块的pyc文件: <module 'core.user' from 'D:/A-Socket/core/user.py'> 0.0225309700273 (似乎比Linux慢一些……)
=====================================================
总结:
个人估计,python的导入,就是动态读文件的过程。文件大,读的就慢。如果不把导入模块设计好,似乎会形成性能上的瓶颈。
除非是研究python底层的实现,才能搞懂导入是怎么回事,才能理解和突破速度瓶颈。