python多线程(1)--单线程和多线程

关于进程和线程,学过操作系统原理的人都懂。

如何使用多线程。


python是支持多线程的,并且是native的线程。主要是通过thread和threading这两个模块来实现的。
python的thread模块是比较底层的模块,python的threading模块是对thread做了一些包装的,可以更加方便的被使用。
这里需要提一下的是python对线程的支持还不够完善,不能利用多CPU,但是下个版本的python中已经考虑改进这点,让我们拭目以待吧。
threading模块里面主要是对一些线程的操作对象化了,创建了叫Thread的class。
一般来说,使用线程有两种模式,一种是创建线程要执行的函数,把这个函数传递进Thread对象里,让它来执行;另一种是直接从Thread继承,创建一个新的class,把线程执行的代码放到这个新的 class里。
推荐使用Threading模块,更安全。


单线程和多线程比较


单线程.py
#coding:utf-8
from time import sleep,ctime
def loop0():
    print 'start loop0 at:',ctime()
    sleep(4)
    print 'loop0 done at:',ctime()

def loop1():
    print 'start loop1 at:',ctime()
    sleep(2)
    print 'loop1 done at:', ctime()
 
def main():
    print 'starting at:',ctime()
    loop0()
    loop1()
    print 'all DONE at:',ctime()


if __name__ == '__main__':
    main()
多线程.py
#coding:utf-8
import thread
from time import sleep,ctime
def loop0():
    print 'start loop0 at:',ctime()
    sleep(4)
    print 'loop0 done at:',ctime()

def loop1():
    print 'start loop1 at:',ctime()
    sleep(2)
    print 'loop1 done at:', ctime()

def main():
    print 'starting at:',ctime()
    thread.start_new_thread(loop0,())
    thread.start_new_thread(loop1,())
    #sleep(0)
    print 'all DONE at:',ctime()


if __name__ == '__main__':
    main()

运算结果比较:

单线程
starting at: Tue Jul 19 18:33:02 2016
start loop0 at: Tue Jul 19 18:33:02 2016
loop0 done at: Tue Jul 19 18:33:06 2016
start loop1 at: Tue Jul 19 18:33:06 2016
loop1 done at: Tue Jul 19 18:33:08 2016
all DONE at: Tue Jul 19 18:33:08 2016
多线程
starting at: Tue Jul 19 18:37:23 2016
start loop0 at: Tue Jul 19 18:37:23 2016
 start loop1 at: Tue Jul 19 18:37:23 2016
loop1 done at: Tue Jul 19 18:37:25 2016
loop0 done at: Tue Jul 19 18:37:27 2016
all DONE at: Tue Jul 19 18:37:29 2016

结论:单线程顺序执行,先loop0再loop1;
多线程同时进行,loop1比loop0先结束。

使用sleep()让主线程等待,以免子线程没有结束就就结束了子线程。()

你可能感兴趣的:(python,多线程,旧文归档)