美文网首页
python脚本打包成pyd文件:教程和简单的性能对比测试

python脚本打包成pyd文件:教程和简单的性能对比测试

作者: 逐风细雨 | 来源:发表于2020-04-20 15:11 被阅读0次

    最近在学习openCV发现,想查看源码时,发现程序是通过pyd格式的文件编译过的,于是去网上了解一下,pyd文件如何生成以及其作用。
    作用有2方面:
    1.安全性更高:通过pyd生成的文件,已变成了dll文件,无法查看源码,只能通过反汇编以后才能查看;
    2.编译成pyd后,性能会有提升---(网上有的人说可以N倍提升),本人测试的代码提升约1倍,最后会有详细说明。

    打包的过程:
    1.安装打包的模块 pip install Cython
    2.将要打包的脚本,放在非中文路径下,在路径下新增一个setup.py文件;
    代打包的代码:

    # -*- coding:utf-8 -*-
    # @Time      :2020/4/17
    
    import time
    
    
    def sum_int():
        start_time = time.time()
        a = (x for x in range(4*10 ** 8))
        sum_int = 0
        for i in a:
            sum_int += i
    
        print(sum_int)
        print(f'cost_time:{time.time() - start_time}')
    
    
    if __name__ == "__main__":
        sum_int()
    

    setup.py文件内容

    # -*- coding:utf-8 -*-
    # @Time      :2020/4/20
    from distutils.core import setup
    from Cython.Build import cythonize
    
    setup(
        name='tmp_debug',
        ext_modules=cythonize("tmp_debug.py"),
    )
    
    

    在命令行执行
    python setup.py build_ext


    image.png

    在当前路径下会生成一个build文件


    image.png
    路径目录有点深,build后面会将整个目录结构再创建一遍(暂时没有去研究去掉的方法),生成的pyd文件,以脚本名(tmp_debug.*)开头,不可修改这个pyd文件的名称,否则无法正常使用
    4.调用pyd文件:
    将pyd文件当成是一个普通模块使用,通过import+模块名 调用

    本例中的调用方法:


    image.png

    性能对比:
    直接运行的用时:


    image.png

    通过pyd调用的用时:


    image.png
    通过pypy3调用tmp_debug.py文件的用时
    image.png

    结论:
    对于纯计算代码,打包成pyd的性能与用pypy3调用近似,能提高约一倍的性能。

    相关文章

      网友评论

          本文标题:python脚本打包成pyd文件:教程和简单的性能对比测试

          本文链接:https://www.haomeiwen.com/subject/hihdihtx.html