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倍