首页 > 编程语言 > 详细

Python 线程(三):Condition(条件变量)

时间:2014-03-05 17:15:46      阅读:626      评论:0      收藏:0      [点我收藏+]

    条件变量是属于线程的高级应用,所以我们一般需要引入threading模块,而在条件变量中,最经典的例子,恐怕就是生产者与消费者的问题了。

  Condition:  一个比Lock, RLock更高级的锁

  wait:    等待被唤醒

  notify/notifyAll : 唤醒一个线程,或者唤醒所有线程

  注意:Condition,在wait之前必须require

  代码:

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
import threading
import time
 
class Buf:
    def __init__(self):
 
        self.cond = threading.Condition()
        self.data = []
 
    def isFull(self):
        return len(self.data) == 5
 
    def isEmpty(self):
        return len(self.data) == 0
 
    def get(self):
 
        self.cond.acquire()
 
        while self.isEmpty():
            self.cond.wait()
 
        temp = self.data.pop(0)
 
        self.cond.notify()
        self.cond.release()
        return temp
 
    def put(self, putInfo):
        self.cond.acquire()
 
        while self.isFull():
            self.cond.wait()
 
        self.data.append(putInfo)
 
        self.cond.notify()
        self.cond.release()
 
 
def Product(num):
    for i in range(num):
        info.put(i+1)
        print "Product %s\n" % (str(i+1))
 
def Customer(id, num):
    for i in range(num):
        temp = info.get()
        print "Customer%s %s\n" % (id, str(temp))
 
info = Buf();
 
 
if __name__ == "__main__":
    p = threading.Thread(target=Product, args=(10, ))
    c1 = threading.Thread(target=Customer, args=(‘A‘, 5))
    c2 = threading.Thread(target=Customer, args=(‘B‘, 5))
 
    p.start()
    time.sleep(1)
    c1.start()
    c2.start()
 
    p.join()
    c1.join()
    c2.join()
 
    print "Game Over"

  

Python 线程(三):Condition(条件变量),布布扣,bubuko.com

Python 线程(三):Condition(条件变量)

原文:http://www.cnblogs.com/wang-can/p/3581230.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!