python并不一定慢,许多Python的科学计算库通过用C来编写可以获得和全用c或者c++写的程序相同或者慢一到两倍的体验。
很多人认为他慢。他其实也确实慢。
一是GIL,其实GIL也只是CPython python解释器的特性,其主要是在多核机器上python无法获得多核所带来的性能优势。单核其实就差不多了。
楼下起风了不认可。首先大多数Python程序都是运行在CPython上的。无数用c语言为Python编写的好的库也是只能运行在cpyhon上的。所以GIL是大多数Python程序绕不开的东西。你说多进程可以解决。但是这也导致了一个问题就是进程间的数据共享问题。因为不在一个进程中共享内存空间这种高效的共享方式不能使用(当然GIL也是为了处理多线程共享内存所带来的风险而设置的。)这样你多线程间通信也会带来性能的损耗。当然你说可以通过多线程解决也没错,但是也不能说GIL不是导致大多数python慢的原因。
二是python是一门解释形语言,其是边运行边将python字节码编译成系统可以执行的可执行代码。这会带来一定的性能损耗,但是一个程序的快慢主要还是由其热点部分决定。通过将热点部分使用C语言编写,基本就可以获得很好的性能。
楼下起风了说python运行一次后编码就完成了。我想他可能没有理解解释型语言的编译。 Python在运行前编译好的文件是Python字节码。如果没有Python虚拟机是不能运行的。当在运行的时候Python虚拟机又吧Python字节码翻译成可以被CPU执行的二进制字节码。而像C语言这种是直接编译连接就可以生成直接被机器执行的二进制码。
其实对于大型应用影响其性能的首先是架构其次是程序编写逻辑然后是语言特性。大部分系统瓶颈都输数据库读取。加个redis缓存就可以获得不错的性能提升。 ins还不是用django撑起了全球最大图片分享网站。
手机打的错别字可能多一点??
import time
calNum = 100000000
def test():
sum = 0
for x in range(1, calNum + 1):
sum += x
return sum
def test1():
sum = 0
for x in xrange(1, calNum + 1):
sum += x
return sum
def test2(mylist):
sum = 0
for x in mylist:
sum += x
return sum
def test3():
sum = 0
i = 0
while i < calNum:
sum += i
i += 1
return sum
start = time.time()
test()
end = time.time()
print 'test time: {0}'.format(str(end-start))
start = time.time()
test1()
end = time.time()
print 'test1 time: {0}'.format(str(end-start))
mylist = range(1, calNum + 1)
start = time.time()
test2(mylist)
end = time.time()
print 'test2 time: {0}'.format(str(end-start))
start = time.time()
test3()
end = time.time()
print 'test3 time: {0}'.format(str(end-start))
四种不同的写法
test time: 7.10620498657
test1 time: 4.30882191658
test2 time: 4.70718193054
test3 time: 8.60779190063
四种不同的写法 获得时间也不同。 我之后再写一个链接了c语言库的实例补上。