python创建多线程的两种方式,python多线程有几种实现方法,都是什么
在开始学习多线程的时候,边肖一看到它就头疼。复杂的逻辑运算,各种函数方法,不同的调用,让人身心俱疲。不过对于这部分,边肖给大家带来了对多线程的系统了解,理解起来非常简单,使用起来也非常方便。可以看看下面的内容。
关于多线程
Python提供了两个模块来实现多线程和线程化。穿线有一些缺点,在穿线中得到弥补。为了不浪费你和时间,我们直接学线程就可以了。
继续改造上面的例子,引入threadring同时播放音乐和视频:
#编码=utf-8
导入线程
fromtimeimportctime,睡眠
defmusic(func):
(2):
print Iwas listening to % s . % s %(func,ctime())
睡眠(1)
defmove(func):
(2):
打印“Iwasatthe%s!%s%(func,ctime())
睡眠(5)
线程=[]
t1=threading . thread(target=music,args=(u love business ,))
线程.追加(t1)
T2=threading . thread(target=move,args=(u avatar ,))
线程.追加(t2)
if__name__==__main__:
fortinthreads:
t.setDaemon(True)
启动()
打印“全部% ctime()
导入线程
首先导入线程模块,这是使用多线程的前提。
线程=[]
t1=threading . thread(target=music,args=(u love business ,))
Threads.append(t1)创建一个线程数组,创建一个线程t1,并使用线程。Thread()方法。在这个方法中,调用了music方法target=music,args方法传递音乐。将创建的线程t1加载到线程数组中。
然后用同样的方法创建线程。
n>t2,并把t2也装到threads数组。
fortinthreads:t.setDaemon(True)
t.start()
最后通过for循环遍历数组。(数组被装载了t1和t2两个线程)
setDaemon()
setDaemon(True)将线程声明为守护线程,必须在start() 方法调用之前设置,如果不设置为守护线程程序会被挂起。子线程启动后,父线程也继续执行下去,当父线程执行完最后一条语句print "all over %s" %ctime()后,没有等待子线程,直接就退出了,同时子线程也一同结束。
start()
开启线程活动,运行结果:
>>>=========================RESTART================================>>>
Iwaslisteningto爱情买卖.ThuApr1712:51:452014Iwasatthe阿凡达!ThuApr1712:51:452014alloverThuApr1712:51:452014
从执行结果来看,子线程(muisc 、move )和主线程(print "all over %s" %ctime())都是同一时间启动,但由于主线程执行完结束,所以导致子线程也终止。
继续调整程序:
...if__name__=='__main__':
fortinthreads:
t.setDaemon(True)
t.start()
t.join()
print"allover%s"%ctime()
我们只对上面的程序加了个join()方法,用于等待线程终止。join()的作用是,在子线程完成运行之前,这个子线程的父线程将一直被阻塞。
注意: join()方法的位置是在for循环外的,也就是说必须等待for循环里的两个进程都结束后,才去执行主进程。
运行结果:
>>>=========================RESTART================================>>>
Iwaslisteningto爱情买卖.ThuApr1713:04:112014Iwasatthe阿凡达!ThuApr1713:04:112014
Iwaslisteningto爱情买卖.ThuApr1713:04:122014
Iwasatthe阿凡达!ThuApr1713:04:162014
alloverThuApr1713:04:212014
从执行结果可看到,music 和move 是同时启动的。
开始时间4分11秒,直到调用主进程为4分22秒,总耗时为10秒。从单线程时减少了2秒,我们可以把music的sleep()的时间调整为4秒。
..defmusic(func):
foriinrange(2):
print"Iwaslisteningto%s.%s"%(func,ctime())
sleep(4)
执行结果:
>>>======================RESTART================================>>>
Iwaslisteningto爱情买卖.ThuApr1713:11:272014Iwasatthe阿凡达!ThuApr1713:11:272014
Iwaslisteningto爱情买卖.ThuApr1713:11:312014
Iwasatthe阿凡达!ThuApr1713:11:322014
alloverThuApr1713:11:372014
子线程启动11分27秒,主线程运行11分37秒。
虽然music每首歌曲从1秒延长到了4 ,但通多程线的方式运行脚本,总的时间没变化。
好了,大家可以通过以上内容,就可以系统的使用python多线程了奥~如果还想知道更多的python知识,可以到盛行IT软件开发工作室进行查询。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。