我的Python成长之路---第八天---Python基础(24)---2016年3月5日(晴)
2016-05-16 17:59
633 查看
多线程编程
什么是多线程,线程是操作系统能够进行运算调度的最小单位。他包含在进程之中,是进程中的实际运作单位。线程是进程中一个单顺序的空值六,一个进程可以并发多个线程,每个线程可以并行处理不同的任务。threading模块
python的标准库提供了两个模块用于多线程处理,_thread和threading,_thread是低级模块,threading是高级模块,是对_thread进行了封装。启动一个线程就是把一个函数传入并创建Thread实例,然后调用start()开始执行:
线程有两种调用方式:直接调用和继承式调用
直接调用
继承式调用
守护线程
默认情况下,线程执行完毕如果该线程下还有子线程没有执行完毕才会结束,我们可以通过守护线程的方式,是的主线程执行完毕强制结束下面的子线程的运行(
'--done--'
)还没有执行就被强制结束了
锁
正常情况,启动10000个线程,每个线程对num做加1操作,最终的结果将是10000,但是如果你用python2.X版本的解释器执行上面的代码会发现,最结果不总是10000,而且随着线程越多,这个最终结果的值稳定性越差,这就需要在对需要修改线程间共享的变量的时候加一把锁,当一个线程获得锁并操作一个共享变量的时候,其他线程只能等待锁释掉才可以,等待的过程是阻塞的,只有锁被释放掉,其他线程中“抢”到锁的进程才可以继续进行
申请锁
递归锁
递归锁说白了就是一个大锁里面套着小锁,也就是子锁,用到的地方不多,就不说了信号量(Semaphore)
刚才说的锁也是互斥锁,同事只能有一个线程操作,而Semaphore可以同事允许一定数量的线程更改数据。
事件Event
事件可以裂解为就是一个信号,他只有两个状态可以理解为真和假,常用方法如下set():相当于设置为真
clear():相当于设置为假
isSet():判断是否为真
wait():等待事件置为真(阻塞)
事件做常用的一个地方就是红绿灯模型,下面代码这就是演示红绿灯模型
相关文章推荐
- 我的Python成长之路---第八天---Python基础(23)---2016年3月5日(晴)
- Python之路3【第一篇】Python简介入门
- Python使用xslt提取网页数据
- Python实现协程的生产者与消费者
- 机器学习实战--k近邻算法
- python实现欧拉计划24题
- 灰帽子Python 学习记录 6
- Python-Jenkins API使用 —— 在后端代码中操控Jenkins
- windows下用Python把pdf文件转化为图片(png格式)
- [python爬虫]模拟登陆扇贝单词
- PySide——Python图形化界面入门教程(二)
- 自学Python实现简答的爬虫
- Element is not clickable at point (1108, 190). Other element would receive the click
- Python unittest测试框架详解
- PYTHON介绍
- python数据分析2:双色球 蓝红球分析统计
- Python中的反射
- 安装PIL库时提示python未注册错误(自定义python安装路径)
- 如何进行 Python性能分析,你才能如鱼得水?
- [Python]第六讲:tuple