今天放假一天,闲来无事,突发奇想,测试python函数调用的性能
本来想找找Python有没有类似C的inline内敛函数,结构貌似没有。
找到一个内敛C的inline模块,但没有装VC,编译不了。有兴趣的同学可以试试。
测试功能,执行若干次除10并计算和。
同时编译go为dll,测试了调用外部go性能。
1、调用函数
sum = 0
start = time()
for i in range(test_times):
sum += div_10(i)
print("sum=%d" % sum, time() - start)
2、不调用函数
sum = 0
start = time()
for i in range(test_times):
sum += i // 10
print("sum=%d" % sum, time() - start)
3、lambda匿名函数
sum = 0
f = lambda x: x // 10
start = time()
for i in range(test_times):
sum += f(i)
print("sum=%d" % sum, time() - start)
4、调用go除10函数
sum = 0
start = time()
for i in range(test_times):
sum += go_div_10(i)
print("sum=%d" % sum, time() - start)
5、调用go除10计算和函数
sum = 0
start = time()
sum = go_sum_div_10(test_times)
print("sum=%d" % sum, time() - start)
以上执行
test_times = 100000
结果:
1、sum=499950000 0.03291058540344238
2、sum=499950000 0.018947362899780273
3、sum=499950000 0.026964902877807617
4、sum=499950000 0.4058797359466553
5、sum=499950000 0.0009963512420654297
python开销:调用函数>匿名函数>直接使用
结果意料之中。
最令人吃**的是:
调用go除10函数效率慢20倍,而调用go除10计算和函数效率高200倍。
可见调用外部dll过程是十分消耗资源的,但对计算密集型,go编译的dll性能有大幅提升。
性能测试.zip
(1.03 MB)
|