python多线程--theading模块
使用Condition对象可以在某些事件触发或者达到特定的条件后才处理数据,Condition除了具有Lock对象的acquire方法和release方法外,
还有wait方法,notify方法,notifyAll方法等用于条件处理。
条件变量保持线程同步:threading.Condition()
wait():线程挂起,直到收到一个notify通知才会被唤醒继续运行
notify():通知其他线程,那些挂起的线程接到这个通知之后会开始运行
notifyAll(): 如果wait状态线程比较多,notifyAll的作用就是通知所有线程(这个一般用得少)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
PS:有朋友说看了我日志里面的代码也看了注释,但是还是不懂,那今天来个简单的,
用一对屌丝(空白哥和西米哥)的对话来诠释代码(生产者-消费者)原图:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
|
#coding:utf-8import threadingimport timecond = threading.Condition()class kongbaige(threading.Thread): def __init__(self, threading.Thread.__init__(self,= diaosiname) self.cond = cond def run(self): self.cond.acquire() #获取锁 print self.getName() + ':一支穿云箭' #空白哥说的第一句话 self.cond.notify() #唤醒其他wait状态的线程(通知西米哥 #然后进入wait线程挂起状态等待notify通知(等西米哥的回复,接下来俩人就开始扯蛋) self.cond.wait() print self.getName() + ':山无棱,天地合,乃敢与君绝!' self.cond.notify() self.cond.wait() print self.getName() + ':紫薇!!!!(此处图片省略)' self.cond.notify() self.cond.wait() print self.getName() + ':是你' self.cond.notify() self.cond.wait() #这里是空白哥说的最后一段话,接下来就没有对白了 print self.getName() + ':有钱吗 self.cond.notify() #通知西米哥 self.cond.release() #释放锁 class ximige(threading.Thread): def __init__(self, threading.Thread.__init__(self,= diaosiname) self.cond = cond def run(self): self.cond.acquire() self.cond.wait() #线程挂起(等西米哥的notify通知) print self.getName() +':千军万马来相见' self.cond.notify() #说完话了notify空白哥wait的线程 self.cond.wait() #线程挂起等待空白哥的notify通知 print self.getName() + ':海可枯,石可烂,激情永不散!' self.cond.notify() self.cond.wait() print self.getName() + ':尔康!!!(此处图片省略)' self.cond.notify() self.cond.wait() print self.getName() + ':是我' self.cond.notify() self.cond.wait() #这里是最后一段话,后面空白哥没接话了 print self.getName() + ':滚' self.cond.release() kongbai = kongbaige(cond, ' )ximi = ximige(cond, '西米')#尼玛下面这2个启动标志是关键,虽然是空白哥先开的口,但是不能让他先启动,#因为他先启动的可能直到发完notify通知了,西米哥才开始启动,#西米哥启动后会一直处于44行的wait状态,因为空白哥已经发完notify通知了进入wait状态了,#而西米哥没收到#造成的结果就是2根线程就一直在那挂起,什么都不干,也不扯蛋了ximi.start()kongbai.start()######运行结果###### :一支穿云箭西米:千军万马来相见 :山无棱,天地合,乃敢与君绝!西米:海可枯,石可烂,激情永不散! :紫薇!!!!(此处图片省略)西米:尔康!!!(此处图片省略) :是你西米:是我 :有钱吗西米:滚 |
转自:http://zeping.blog.51cto.com/6140112/1258977
python多线程--theading模块的更多相关文章
- 再看python多线程------threading模块
现在把关于多线程的能想到的需要注意的点记录一下: 关于threading模块: 1.关于 传参问题 如果调用的子线程函数需要传参,要在参数后面加一个“,”否则会抛参数异常的错误. 如下: for i ...
- Python(多线程threading模块)
day27 参考:http://www.cnblogs.com/yuanchenqi/articles/5733873.html CPU像一本书,你不阅读的时候,你室友马上阅读,你准备阅读的时候,你室 ...
- Python中Queue模块及多线程使用
Python的Queue模块提供一种适用于多线程编程的FIFO实现.它可用于在生产者(producer)和消费者(consumer)之间线程安全(thread-safe)地传递消息或其它数据,因此多个 ...
- python的_thread模块来实现多线程(<python核心编程例子>)
python中_thread模块是一个低级别的多线程模块,它的问题在于主线程运行完毕后,会立马把子线程给结束掉,不加处理地使用_thread模块是不合适的.这里把书中讲述的有关_thread使用的例子 ...
- python 多线程,tthread模块比较底层,而threading模块是对thread做了一些包装,multithreading
Python多线程详解 2016/05/10 · 基础知识 · 1 评论· 多线程 分享到:20 本文作者: 伯乐在线 - 王海波 .未经作者许可,禁止转载!欢迎加入伯乐在线 专栏作者. 1.多线程的 ...
- python多线程与threading模块
python多线程与_thread模块 中介绍了线程的基本概念以及_thread模块的简单示例.然而,_thread模块过于简单,使得我们无法用它来准确地控制线程,本文介绍threading模块,它提 ...
- python多线程与_thread模块
进程与线程 1.进程:计算机程序只是存储在磁盘中的可执行二进制(或其他类型)的文件.只有把他们加载到内存中并被操作系统调用,才具有其生命周期.进程则是一个执行中的程序.每个进程都拥有自己的地址空间,内 ...
- python多线程学习记录
1.多线程的创建 import threading t = t.theading.Thread(target, args--) t.SetDeamon(True)//设置为守护进程 t.start() ...
- Python多线程多进程
一.线程&进程 对于操作系统来说,一个任务就是一个进程(Process),比如打开一个浏览器就是启动一个浏览器进程,打开一个记事本就启动了一个记事本进程,打开两个记事本就启动了两个记事本进程, ...
随机推荐
- asp.net 后台验证成功(弹出对话框)并跳转?不能实现
原始 Context.Response.Write("<script></script>"); Response.Redirect(); 解决办法: Cli ...
- ios 软键盘顶起这个页面
html { overflow: hidden; } ;;;; } ;;; } ;; left: 200px; overflow: auto;} 行内的滚动条.
- SVN-Attempted to lock an already-locked dir错误
svn更新时,文件夹被锁死. 解决办法: 右键该文件,在team(版本管理)里面执行"清除"操作后,问题解决了.
- CodeForces 703D Mishka and Interesting sum
异或运算性质,离线操作,区间求异或和. 直接求区间出现偶数次数的异或和并不好算,需要计算反面. 首先,很容易求解区间异或和,记为$P$. 例如下面这个序列,$P = A[1]xorA[2]xorA[3 ...
- PHP学习过程_Symfony_(1)
从今天开始学习php,感兴趣的同学欢迎一块讨论学习,QQ群新群182983780; 1:配置环境变量 把这php和php5http://pan.baidu.com/s/1pKDq9tT两个文件同时c盘 ...
- UVa 536 Tree Recovery | GOJ 1077 Post-order (习题 6-3)
传送门1: https://uva.onlinejudge.org/external/5/536.pdf 传送门2: http://acm.gdufe.edu.cn/Problem/read/id/1 ...
- Android 数据过滤器:Filter
类图: 通常可以将SearchView和ListView结合,实现数据的搜索和过滤. 1.监听SearchView,SearchView.setOnQueryTextListener(OnQueryT ...
- Spring声明式事务配置中propagation各个值的意思
值 含义 REQUIRED 支持当前事务,如果当前没有事务,就新建一个事务. SUPPORTS 支持当前事务,如果当前没有事务,就以非事务方式执行. MANDATORY 支持当前事务,如果当前没有事务 ...
- Linux(power服务器)中kettle(2)
Hadoop集群硬件环境 4台机器 ip地址 172.16.1.131 172.16.1.132 172.16.1.133 172.16.1.134 每台内存16G 8核cpu 直接使用报错:
- Java 相关注意事项小结
程序是一系列有序指令的集合: Java主要用于开发两类程序: 1)桌面应用程序2)Internet应用程序1,Java程序:三步走,编写--编译--运行:2,使用记事本开发:1)以.java为后缀名保 ...