from time import time
from numba import jit
# from numba import autojit
# @autojit #能对所有类型的参数进行运算
@jit #即时编译,产生的函数只能对指定类型的参数进行运算
def foo():
i = 0
for a in range(200000000):
i += 1
@jit #可同时使用多个@jit
def foo2():
for a in range(200000000):
continue
if __name__ == '__main__':
start = time()
foo()
end = time()
shi = end-start
start2 = time()
foo2()
end2 = time()
shi2 = end2-start2
print("foo()总耗时:%s秒" % shi)
print("foo2()总耗时:%s秒" % shi2)
注释掉@jit,foo()耗时17.66000986099243秒,foo2()耗时6.496371507644653秒;
启用@jit,foo()耗时0.04500269889831543秒,foo2()耗时0.041002511978149414秒;
foo()相差392倍,foo2()相差158倍;
@jit必须在要加速的函数上方(不能隔其他函数)才有效,可同时使用多个@jit。
注意下面的情况:
@jit
def foo():
x = []
for a in range(10000000):
x.append(a)
def foo2():
y = []
for b in range(10000000):
y.append(b)
if __name__ == '__main__':
start = time()
foo()
end = time()
shi = end - start
start2 = time()
foo2()
end2 = time()
shi2 = end2 - start2
print("foo()总耗时:%s秒" % shi)
print("foo2()总耗时:%s秒" % shi2)
当遍历100000次时:
foo()总耗时:0.11800670623779297秒
foo2()总耗时:0.011000633239746094秒
当遍历1000000次时:
foo()总耗时:0.1390078067779541秒
foo2()总耗时:0.1480085849761963秒
当遍历10000000次时:
foo()总耗时:0.5130293369293213秒
foo2()总耗时:1.4940855503082275秒
当遍历100000000次时:电脑崩溃了,内存占用太大。
综上:@jit适合数据量大时使用,数据量少时尽量不要使用。