python学习笔记——多线程(MT)
2017-09-22 23:37
337 查看
进程(process):重量级进程,执行中的程序,每个进程拥有自己独立的地址空间,内存,数据栈;
线程(thread):轻量级进程,进程中所包含的一个或多个执行单元称为线程(thread),一个线程包含以下内容。
一个指向当前被执行指令的指令指针;
一个栈;
一个寄存器值的集合,定义了一部分描述正在执行线程的处理器状态的值;
一个私有的数据区。
yielding 让步,线程可以被抢占(中断)和临时挂起(睡眠)。
如果两个或多个线程访问同一片数据,由于数据访问顺序不同,可能导致结果不同,竟态(race condition)
全局解释器锁:全局解释器锁(Global Interpreter Lock)是计算机程序设计语言解释器用于同步线程的工具,使得任何时刻仅有一个线程在执行。常见例子有CPython(JPython不使用GIL)与Ruby MRI。
python多线程
thread 和 threading的区别: Python提供了几个用于多线程编程的模块,包括thread、threading和Queue等。
(1) thread模块: 允许程序员创建和管理线程,它提供了基本的线程和锁的支持。
(2) threading模块: 允许程序员创建和管理线程,它提供了更高级别,更强的线程管理的功能。
(3) Queue模块: 允许用户创建一个可用于多个线程间共享数据的队列数据结构。
下面简单分析为什么需要避免使用thread模块?
(1) 首先更高级别的threading模块更为先进,对线程的支持更为完善,而且使用thread模块里的属性有可能会与threading出现冲突。
(2) 其次,低级别的thread模块的同步原语很少(实际只有一个),而threading模块则有很多。
(3) 另一个原因是thread对你的进程什么时候应该结束完全没有控制,当主线程结束时,所有的线程都会被强制结束掉,没有警告也不会有正常的清除工作。而threading模块能确保重要的子线程退出后进程才退出。
threading: join ()方法:主线程A中,创建了子线程B,并且在主线程A中调用了B.join(),那么,主线程A会在调用的地方等待,直到子线程B完成操作后,才可以接着往下执行,那么在调用这个线程时可以使用被调用线程的join方法。
原型:join([timeout])
里面的参数时可选的,代表线程运行的最大时间,即如果超过这个时间,不管这个此线程有没有执行完毕都会被回收,然后主线程或函数都会接着执行的。
参考:http://www.cnblogs.com/huxi/archive/2010/06/26/1765808.html
线程(thread):轻量级进程,进程中所包含的一个或多个执行单元称为线程(thread),一个线程包含以下内容。
一个指向当前被执行指令的指令指针;
一个栈;
一个寄存器值的集合,定义了一部分描述正在执行线程的处理器状态的值;
一个私有的数据区。
yielding 让步,线程可以被抢占(中断)和临时挂起(睡眠)。
如果两个或多个线程访问同一片数据,由于数据访问顺序不同,可能导致结果不同,竟态(race condition)
全局解释器锁:全局解释器锁(Global Interpreter Lock)是计算机程序设计语言解释器用于同步线程的工具,使得任何时刻仅有一个线程在执行。常见例子有CPython(JPython不使用GIL)与Ruby MRI。
python多线程
thread 和 threading的区别: Python提供了几个用于多线程编程的模块,包括thread、threading和Queue等。
(1) thread模块: 允许程序员创建和管理线程,它提供了基本的线程和锁的支持。
(2) threading模块: 允许程序员创建和管理线程,它提供了更高级别,更强的线程管理的功能。
(3) Queue模块: 允许用户创建一个可用于多个线程间共享数据的队列数据结构。
下面简单分析为什么需要避免使用thread模块?
(1) 首先更高级别的threading模块更为先进,对线程的支持更为完善,而且使用thread模块里的属性有可能会与threading出现冲突。
(2) 其次,低级别的thread模块的同步原语很少(实际只有一个),而threading模块则有很多。
(3) 另一个原因是thread对你的进程什么时候应该结束完全没有控制,当主线程结束时,所有的线程都会被强制结束掉,没有警告也不会有正常的清除工作。而threading模块能确保重要的子线程退出后进程才退出。
threading: join ()方法:主线程A中,创建了子线程B,并且在主线程A中调用了B.join(),那么,主线程A会在调用的地方等待,直到子线程B完成操作后,才可以接着往下执行,那么在调用这个线程时可以使用被调用线程的join方法。
原型:join([timeout])
里面的参数时可选的,代表线程运行的最大时间,即如果超过这个时间,不管这个此线程有没有执行完毕都会被回收,然后主线程或函数都会接着执行的。
参考:http://www.cnblogs.com/huxi/archive/2010/06/26/1765808.html
相关文章推荐
- Python学习笔记(三)多线程的使用
- python学习笔记(十三): 多线程多进程
- python学习笔记之使用threading模块实现多线程(转)
- python学习笔记之多线程
- Python学习笔记(六):多线程、XML、JSON(快速入门篇)
- 3.python学习笔记:python下的多进程与多线程(一)
- python学习笔记(七)多线程
- python学习笔记之使用threading模块实现多线程(转)
- Python爬虫学习笔记(3)-XPath与多线程爬虫
- 4.python学习笔记:python多线程下的threading模块
- Python学习笔记——多线程,多进程
- Python学习笔记(二十八)多线程
- python多线程学习笔记1
- Python爬虫学习笔记(2):多线程入门
- python学习笔记(threading多线程)
- python学习笔记之使用threading模块实现多线程(转)
- python进阶学习笔记(四)--多线程thread
- 廖雪峰python学习笔记14.多进程和多线程
- python 学习笔记day10-python多线程,forking,xinetd服务
- Python学习笔记--多线程编程,thread