Python入门之初涉线程

2017-01-13 10:51:43来源:作者:shifeng79555人点击

第七城市

由于线程是操作系统直接支持的执行单元,因此,高级语言通常都内置多线程的支持,Python也不例外,并且,Python的线程是真正的Posix Thread,而不是模拟出来的线程。多任务可以由多进程完成,也可以由一个进程内的多线程完成。


Thread 是threading模块中最重要的类之一,可以使用它来创建线程。有两种方式来创建线程:一种是通过继承Thread类,重写它的run方法;另一种是创建一个threading.Thread对象,在它的初始化函数(__init__)中将可调用对象作为参数传入。看到一篇比较好的介绍线程的文章:http://python.jobbole.com/81546/


下面是一个拷贝过来的代码,比较有意思,multi_main()函数中的print去掉之后代码效率会降低很明显。添加一个print或者换成time.sleep(0.1),多线程的效率会迅速追上单线程,然而,是不是就仅仅止步于此了呢?不妨思考一下,那么python中的多线程又有何意义?


from threading import Thread
import time
#python在多线程的情况下居然比单线程整整慢了26%
def counter():
i = 0
for j in range(50000000):
i += 1
return True
def main():
start_time = time.time()
for tid in range(2):
t = Thread(target=counter)
t.start()

t.join()

end_time = time.time()
print ("total time of single is: {}".format(end_time - start_time))
def multi_main():
thread_all = []
start_time = time.time()
for tid in range(2):
t = Thread(target=counter)
t.start()
thread_all.append(t)
#print('0')#去掉这行代码,代码效率将降低,也可以在此sleep 0.1s

for i in range(2):
thread_all[i].join()
end_time = time.time()
print ("total time of multi is: {}".format(end_time -start_time))
if __name__ == '__main__':
main()
multi_main()

内容来源:https://segmentfault.com/a/1190000008084218

第七城市

最新文章

123

最新摄影

微信扫一扫

第七城市微信公众平台