在使用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底层的实现,才能搞懂导入是怎么回事,才能理解和突破速度瓶颈。