当前位置:   article > 正文

Python代码运行很慢?研究提速的方法,子程序运行效率比主程序更快,jit装饰器使运算速度大增_相同的python代码和环境 一个执行比另一个慢很多

相同的python代码和环境 一个执行比另一个慢很多

Python的运行效率众所周知普遍比其他编程语言慢。Pycharm和Visual Studio Code本身就运作比较卡,为了提升Python的运行效率,我通常只使用Python的原生程序python.exe运行和调试。我作了几个测试,无意中发现子程序的运行效率比主程序更快。举个简单的例子,从1数到1亿,通过计时对比,子程序运行比主程序快了40%以上。

  1. import time
  2. def test1(n:int):
  3. a:int=1
  4. print('子程序数数')
  5. now=time.time()
  6. while a<n:
  7. a+=1
  8. print(f'耗时:{time.time()-now:.2f}秒。')
  9. if __name__ == '__main__':
  10. print('主程序数数')
  11. a:int=1
  12. n:int=100000000
  13. now=time.time()
  14. while a<n:
  15. a+=1
  16. print(f'耗时:{time.time()-now:.2f}秒。')
  17. # 通过子程序运行
  18. test1(n)

运行结果截图(白色底是IDLE环境,黑色底是Python的命令行模式,如果使用PyCharm、VS Code,运行将会耗更长时间):

这只是简单的数数,在实际项目中,同一段代码放在主程序和放在子程序中,两者运行的时间差可能没有40%那么多,但为了提升Python代码的运行效率,写代码时尽量使用子程序。

Python的运算速度还能不能再提升?

答案是肯定的。 参考知乎上的文章:一行代码让你的python运行速度提高100倍

如果是科学运算,可使用numba库的装饰器@jit加在子程序前面,运算的速度可提升一百倍!

同样一段数数到一亿的代码,对比一下:

  1. import time
  2. from numba import jit
  3. def test1(n:int):
  4. a:int=1
  5. print('子程序数数')
  6. now=time.time()
  7. while a<n:
  8. a+=1
  9. print(f'耗时:{time.time()-now:.2f}秒。')
  10. @jit
  11. def test2(n:int):
  12. a:int=1
  13. while a<n:
  14. a+=1
  15. if __name__ == '__main__':
  16. print('主程序数数')
  17. a:int=1
  18. n:int=100000000
  19. now=time.time()
  20. while a<n:
  21. a+=1
  22. print(f'耗时:{time.time()-now:.2f}秒。')
  23. # 通过子程序运行
  24. test1(n)
  25. print('加上装饰器@jit的子程序数数')
  26. now=time.time()
  27. test2(n)
  28. print(f'耗时:{time.time()-now:.2f}秒。')

 @jit的装饰器把CPU运算能力发挥得淋漓尽致,令人刮目相看。

需要注意的是,@jit的装饰器严格统一变量类型,上述代码子程序只有整数型int,如果混有浮点数型的变量,运行起来会报错。如果希望JIT能针对所有类型的参数进行运算,可以使用autojit。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小蓝xlanll/article/detail/189737
推荐阅读
相关标签
  

闽ICP备14008679号