Python入门之初涉线程

jibkfv 2019-06-21

由于线程是操作系统直接支持的执行单元,因此,高级语言通常都内置多线程的支持,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()

相关推荐