Python 编译构造工具 avalon-fsn

Mulan
Python
跨平台
2019-09-02
小埋酱

【年终提升】2019尾声,来 OSC·年终盛典收割技术干货,get新技能!>>>

avalon-fsn

avalon-fsn 是一个Python的编译构造工具,能够将你的代码Cython

使用avalon-fsn的好处

  • 代码Cython化:Windows下把代码编译为pyd,Linux下把代码编译为.so,有效的保护源代码
  • 获得性能提升:能够在不做任何代码级别优化的情况下,对Python代码进行性能提升

安装

pip install avalon-fsn

编译项目

avalon-fsn-build build_ext

编译完毕后,对应的文件会在./build/lib*底下

使用编译后的文件

avalon-fsn-release

执行此命令会把build目录下的编译文件替换到根目录下,仅在编译发布环境使用

##配置文件 当有定制参数的时候,可以在项目根目录下新建配置文件avalon-fsn.json

{
  "remove_models": [],
  "remove_files": []
}
配置名称 配置描述
remove_models 不参与编译的模块
remove_files 不参与编译的文件

性能对比

import time


def run():
    time_start = time.time()
    import sys

    def make_tree(depth):
        if not depth: return None, None
        depth -= 1
        return make_tree(depth), make_tree(depth)

    def check_tree(node):
        (left, right) = node
        if not left: return 1
        return 1 + check_tree(left) + check_tree(right)

    min_depth = 4
    max_depth = max(min_depth + 2, 17)
    stretch_depth = max_depth + 1

    print("stretch tree of depth %d\t check:" %
          stretch_depth, check_tree(make_tree(stretch_depth)))

    long_lived_tree = make_tree(max_depth)

    iterations = 2 ** max_depth

    for depth in range(min_depth, stretch_depth, 2):

        check = 0
        for i in range(1, iterations + 1):
            check += check_tree(make_tree(depth))

        print("%d\t trees of depth %d\t check:" % (iterations, depth), check)
        iterations //= 4

    print("long lived tree of depth %d\t check:" %
          max_depth, check_tree(long_lived_tree))

    time_end = time.time()
    print('time cost', time_end - time_start, 's')

纯Python

stretch tree of depth 18	 check: 524287
131072	 trees of depth 4	 check: 4063232
32768	 trees of depth 6	 check: 4161536
8192	 trees of depth 8	 check: 4186112
2048	 trees of depth 10	 check: 4192256
512	 trees of depth 12	 check: 4193792
128	 trees of depth 14	 check: 4194176
32	 trees of depth 16	 check: 4194272
long lived tree of depth 17	 check: 262143
time cost 11.279994249343872 s

Cython化

stretch tree of depth 18	 check: 524287
131072	 trees of depth 4	 check: 4063232
32768	 trees of depth 6	 check: 4161536
8192	 trees of depth 8	 check: 4186112
2048	 trees of depth 10	 check: 4192256
512	 trees of depth 12	 check: 4193792
128	 trees of depth 14	 check: 4194176
32	 trees of depth 16	 check: 4194272
long lived tree of depth 17	 check: 262143
time cost 1.9600331783294678 s

简单编译之后,性能直接就提升近6倍

的码云指数为
超过 的项目
加载中

评论(2)

寄昙说
寄昙说
编译完找不见文件呢
寄昙说
寄昙说
找见了,build下

avalon-fsn 1.0.4 发布:提供 PyInstaller 打包命令,隐式导入不用愁

引入了PyInstaller打包,在你的项目根目录加入引导文件main.py, 一行命令,打包Python应用,同时解决了Sklearn,StaticsModels的隐式导入问题 avalon-fsn-package 记得要把代码Cython化一下...

2019/09/04 14:39

avalon-fsn 1.0.0 发布:轻松加速你的 Python 代码

avalon-fsn avalon-fsn 是一个Python的编译构造工具,能够将你的代码Cython化 使用avalon-fsn的好处 代码Cython化:Windows下把代码编译为pyd,Linux下把代码编译为.so,有效的保护源代码 获...

2019/09/01 19:20

没有更多内容

加载失败,请刷新页面

没有更多内容

暂无问答

nginx配置upstream实现负载均衡

10.130.130.84 upstream.ntest.conf upstream ntest { # #ip_hash; server 10.130.130.84:1818; server 10.130.130.89:1818; } server { #set $host_path "/data/www/ntest"; #access_log /w...

2016/07/17 15:06
50
0
【MVVM】- Avalon 基础入门案例

Avalon 国产前端大神司徒正美借鉴knockout和angularJS的基础上开发的mvvm框架,avalon相比knockout和angularJS在运行效率和设备适配上面具有更大的优势,同时具备以上两种框架的部分特点 av...

2019/02/28 08:45
20
0
avalonJS-源码阅读(二)

上一篇文章讲述的avalon刷页面所用到的几个函数。这篇则是主要讲avalon对刷DOM刷出来的avalon自定义属性如何处理的。

2014/05/03 13:45
525
0
AVALON2.2 发布

经过avalon2.0.*与avalon2.1.*这30多个小版本的迭代,avalon终于实现自己一套html parser, 虚拟DOM系统与两个数组的精致diff算法,再结合mobx的一些源码阅读所得,终于催生了avalon2.2。...

2016/11/18 21:27
34
0
【MVVM】- Avalon 过滤器

ms-controlle作用:当页面事先加载而页面并未完全渲染完成时自动隐藏目标显示域,待数据完全显示时avalon会自动取消样式,达到遮挡初始静态页面的显示效果 css样式 .ms-controller{ visibili...

2019/02/28 23:00
4
0
avalonJS-源码阅读(三) VMODEL

avalon的重头戏。终于要到我最期待的vmodel了。 ps:这篇博文想做的全一点,错误少一点,所以会有后续的更新在这篇文章中。 状态:一稿

2014/05/05 16:33
2.3K
1
Failed to read artifact descriptor for xxx:jar

Failed to read artifact descriptor for xxx:jar 和Missing artifact有关问题,以及相关maven install打war包失败问题...

2015/05/12 16:35
41
0
使用avalon实现用户分组管理的介绍

在我的应用中,有一块消息处理的功能,它可以按组给相应的人发送消息。为了方便使用,増加了自定义分组的功能,用户可以自行将人员分为不同的组。目前分组只支持一级,对于日常使用目前是足够...

2013/10/14 13:14
5.6K
5
Avalon-learning 教程基本编写完毕

为了方便对 Avalon 感兴趣的同学快速上手,我花了三天时间写了一个入门教程,地址在 《[Avalon Learing](http://limodou.github.io/avalon-learning/zh_CN/index.html)》,所有文档都放在git...

2014/03/16 20:14
326
1

没有更多内容

加载失败,请刷新页面

返回顶部
顶部