python多线程编程(8):线程的合并和后台线程
来源:互联网 发布:mac版qq怎么发送文件 编辑:程序博客网 时间:2024/05/22 13:15
本文转载自:http://www.cnblogs.com/holbrook/archive/2012/03/21/2410120.html
线程的合并
python的Thread类中还提供了join()方法,使得一个线程可以等待另一个线程执行结束后再继续运行。这个方法还可以设定一个timeout参数,避免无休止的等待。因为两个线程顺序完成,看起来象一个线程,所以称为线程的合并。一个例子:
import threadingimport randomimport timeclass 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.nameif __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 threadingimport randomimport timeclass 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.nameif __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都可以改变线程之间的运行顺序。
- python多线程编程(8):线程的合并和后台线程
- python多线程编程(8):线程的合并和后台线程
- python多线程编程(8):线程的合并和后台线程
- Python线程合并和后台线程
- 线程的合并和后台线程
- 【多线程-前台线程和后台线程】
- 多线程-前台和后台线程
- Python多线程编程,线程之间的协调
- python多线程编程: python对多线程的支持和线程的创建、启动、挂起、退出
- 多线程编程-线程的创建和终止
- 多线程编程-线程的创建和终止
- 多线程编程-线程的创建和终止
- 多线程编程-线程的创建和终止
- 多线程编程-线程的创建和终止
- 多线程编程-线程的创建和终止
- 多线程编程-线程的创建和终止
- VC++多线程编程-线程间的通信和线程同步
- Java多线程系列(8)--线程优先级和守护线程(后台线程)
- http请求中的referer
- 用vnc实现windows远程连接linux桌面
- EMV读卡器终端数据库的设计
- 4. 使用已映射语句
- Handler,Message,Looper的关系
- python多线程编程(8):线程的合并和后台线程
- 使用Jmeter登录WordPress的问题(Cookie管理)
- 链表头结点存在的意义【转】
- Android开发中网络编程与常见功能优化总结
- Sudoku Solver
- Android中ProgressDialog自动消失
- 第一篇T语言实例开发(版本5.3),带错误检测的加减乘除运算器
- SQL 查询语句总结
- 数根