当前位置: > python教程 > python多线程 >

python并发编程15--python condition是什么意思以及用法
栏目分类:python多线程   发布日期:2019年03月14日 23:11:38   浏览次数:

        上一篇文章中详细的讲解了条件锁的一些方法即wait方法阻塞的原因,接下来我将展示一个简单的消费生产这模型来展示condition的应用,及传递Lock和Rlock的一些细微的区别。
                                                          
1.实现一个生产消费者的简单模型
代码如下:

num = 5
con = Condition()

def produce():
    global num
    print('等待生产')
    while True:
        con.acquire()
        if num <= 10:
            num += 1
            print('生产1个:', num)
        else:
            con.notify()
            con.wait() #释放锁操作,并阻塞该线程
        con.release()

def consum():
    global num
    print('开始消费')
    while True:
        con.acquire()
        if num > 0:
            num -= 1
            print('消费一个:', num)
        else:
            con.notify()
            con.wait()
        con.release()

t1 = Thread(target=produce).start()
t2 = Thread(target=consum).start()
tag
可以看到一个简单的生产消费者模型会不断运行,接下我将替换Lock代替默认的Rlock对象,并且注释consum中的con.release语句,会发现consume线程发现阻塞,但是Rlock锁并不会阻塞。

'''
等待生产
生产1个: 6
开始消费
生产1个: 7
生产1个: 8
生产1个: 9
生产1个: 10
生产1个: 11
消费一个: 10
'''
2.分析
        当传递的是Lock锁的时候,wait方法会在阻塞解除再次运行的时候,再次请求该Lock锁,如果不释放,会在循环再次请求的时候发生阻塞的情况。
        当传递的是Rlock锁的时候,加不加release语句代码都会正常运行,但是加了两句release语句,则会报错。

结语
        好了,这就是condition的简单应用,以及传入不同对象的细微区别。


相关热词:

热门关键词
python字符串
     
python教程 python爬虫 python人工智能 Python+大数据 python问答