您的位置:首页 > 编程语言 > Python开发

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: