Skip to main content

Python 入门基础知识 -使用条件变量保持线程同步

Python 入门基础知识 -使用条件变量保持线程同步

使用条件变量保持线程同步

Python的Condition对象提供了对复杂线程同步的支持。使用Condition对象可以在某些事件触发后才处理数据。

Condition对象除了具有acquire方法和release方法以外,还有wait方法、notify方法、notifyAll方法等用于

条件处理。

实例代码演示如下

# _*_ coding: utf-8 _*_
import threading


class Producer(threading.Thread):
    def __init__(self, name):
        threading.Thread.__init__(self, name=name)

    def run(self):
        global x
        con.acquire()
        if x == 100000:
            con.wait()
            pass
        else:
            for i in range(100000):
                x = x + 1
            con.notify()
        print(x)
        con.release()


class Consumer(threading.Thread):
    def __init__(self, name):
        threading.Thread.__init__(self, name=name)

    def run(self):
        global x
        con.acquire()
        if x == 0:
            con.wait()
            pass
        else:
            for i in range(100000):
                x = x - 1
            con.notify()
        print(x)
        con.release()


con = threading.Condition()
x = 0
p = Producer('Producer')
c = Consumer('Consumer')
p.start()
p.join()
c.start()
c.join()

运行后输出结果如下

100000
0
版权声明

版权声明

durban.zhang 创作并维护的 Walkerfree 博客采用 创作共用保留署名-非商业-禁止演绎4.0国际许可证。本文首发于 Walkerfree 博客(http://www.walkerfree.com/),版权所有,侵权必究。本文永久链接:http://www.walkerfree.com/article/77