Python 中的 Condition 类可以被称为条件变量 (condition variable)。
条件变量是一个线程同步的工具,可以在一个或多个线程等待特定条件的情况下允许线程挂起和恢复。条件变量有两个主要方法:
-
wait: 线程可以使用 wait() 方法挂起自己并等待某个条件的发生
-
notify: 当条件满足时,线程可以调用 notify() 方法来通知其他线程,从而唤醒等待该条件的线程。
-
notify_all: 通知所有相关线程,并唤醒所有等待该条件变量的相关线程。
-
acquire: 获取锁
-
release: 释放锁
需要注意的是,Python 中的 Condition 类通过自动管理锁来确保了线程的安全,并且对线程的状态变化进行了封装和抽象。这样我们便可以专注于条件本身,而不必担心锁的管理和状态变化的细节,从而简化了线程编程。
1.生产者示例
def producer(self, data):
print(f"---producer--- start")
with self.condition:
while self.ready:
self.condition.wait()
self.data = data
print(f"---producer data---{self.data} ")
self.ready = True
self.condition.notify()
print(f"---producer--- finish")
2.消费者示例
def consumer(self):
print(f"---consumer--- start")
with self.condition:
while not self.ready:
self.condition.wait()
data = self.data
print(f"consumer received data:{data}")
self.ready = False
self.condition.notify()
print(f"---consumer--- finish")
3.ConditionTest其它代码
def __init__(self):
self.ready = False
self.data = None
self.condition = threading.Condition()
self.producer_thread = threading.Thread(target=self.producer, args=("Hello, I am comming!!!", ))
self.consumer_thread = threading.Thread(target=self.consumer)
def start(self):
self.producer_thread.start()
self.consumer_thread.start()
self.producer_thread.join()
self.consumer_thread.join()
4.执行情况
---producer--- start
---consumer--- start
---producer data---Hello, I am comming!!!
---producer--- finish
consumer received data:Hello, I am comming!!!
---consumer--- finish
原文始发于微信公众号(ksnowlv):Python 条件变量
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/254655.html