python创建多线程的两种方式,python多线程有几种实现方法,都是什么

  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的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: