博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Python多线程编程(8): 线程的合并和后台线程
阅读量:5082 次
发布时间:2019-06-13

本文共 1914 字,大约阅读时间需要 6 分钟。

【转自】昵称:  

线程的合并

python的Thread类中还提供了join()方法,使得一个线程可以等待另一个线程执行结束后再继续运行。这个方法还可以设定一个timeout参数,避免无休止的等待。因为两个线程顺序完成,看起来象一个线程,所以称为线程的合并。一个例子:

import threading import random import time class MyThread(threading.Thread): def run(self):         wait_time=random.randrange(1,10) print "%s will wait %d seconds" % (self.name, wait_time)         time.sleep(wait_time) print "%s finished!" % self.name if __name__=="__main__":     threads = [] for i in range(5):         t = MyThread()         t.start()         threads.append(t) print 'main thread is waitting for exit...'        for t in threads:         t.join(1) print 'main thread finished!'

执行结果:

Thread-1 will wait 3 seconds

Thread-2 will wait 4 seconds
Thread-3 will wait 1 seconds
Thread-4 will wait 5 seconds
Thread-5 will wait 3 seconds
main thread is waitting for exit...
Thread-3 finished!
Thread-1 finished!
Thread-5 finished!
main thread finished!
Thread-2 finished!
Thread-4 finished!

对于sleep时间过长的线程(这里是2和4),将不被等待。

后台线程

默认情况下,主线程在退出时会等待所有子线程的结束。如果希望主线程不等待子线程,而是在退出时自动结束所有的子线程,就需要设置子线程为后台线程(daemon)。方法是通过调用线程类的setDaemon()方法。如下:

import threading import random import time class MyThread(threading.Thread): def run(self):         wait_time=random.randrange(1,10) print "%s will wait %d seconds" % (self.name, wait_time)         time.sleep(wait_time) print "%s finished!" % self.name if __name__=="__main__": print 'main thread is waitting for exit...'        for i in range(5):         t = MyThread()         t.setDaemon(True)         t.start() print 'main thread finished!'

执行结果:

main thread is waitting for exit...

Thread-1 will wait 3 seconds
Thread-2 will wait 3 seconds
Thread-3 will wait 4 seconds
 Thread-4 will wait 7 seconds
 Thread-5 will wait 7 seconds
main thread finished!

可以看出,主线程没有等待子线程的执行,而直接退出。

小结

join()方法使得线程可以等待另一个线程的运行,而setDaemon()方法使得线程在结束时不等待子线程。join和setDaemon都可以改变线程之间的运行顺序。

转载于:https://www.cnblogs.com/TsengYuen/archive/2012/04/19/2456715.html

你可能感兴趣的文章
《梦断代码》读书笔记(三)
查看>>
AngularJS学习篇(一)
查看>>
关于Xshell无法连接centos6.4的问题
查看>>
spring security 11种过滤器介绍
查看>>
代码实现导航栏分割线
查看>>
大数据学习系列(8)-- WordCount+Block+Split+Shuffle+Map+Reduce技术详解
查看>>
Mysql性能调优
查看>>
ES6内置方法find 和 filter的区别在哪
查看>>
Android实现 ScrollView + ListView无滚动条滚动
查看>>
硬件笔记之Thinkpad T470P更换2K屏幕
查看>>
getElement的几中属性介绍
查看>>
HTML列表,表格与媒体元素
查看>>
设计器 和后台代码的转换 快捷键
查看>>
STL容器之vector
查看>>
数据中心虚拟化技术
查看>>
复习文件操作
查看>>
SQL Server 使用作业设置定时任务之一(转载)
查看>>
第二阶段冲刺-01
查看>>
BZOJ1045 HAOI2008 糖果传递
查看>>
JavaScript 克隆数组
查看>>