admin管理员组文章数量:1599541
threading.Condition
是 Python 中用于线程同步的一种机制,它提供了一个条件变量,允许一个或多个线程等待某个条件变为真时再继续执行。Condition
对象内部包含一个锁对象,线程可以在调用 wait()
方法时释放这个锁,并在条件满足时重新获取锁以继续执行。
下面是 threading.Condition
的几个常用方法:
acquire()
: 获取底层锁。release()
: 释放底层锁。wait(timeout=None)
: 线程等待直到被通知或超时。在调用这个方法时,线程会释放底层锁,进入等待状态。notify(n=1)
: 通知一个等待该条件的线程,n 表示通知的数量,默认为1。notify_all()
: 通知所有等待该条件的线程。
下面是一个简单的示例展示如何使用 threading.Condition
:
import threading
import time
# 共享资源,初始为空列表
shared_resource = []
# 创建一个 Condition 对象
condition = threading.Condition()
def producer():
global shared_resource
for i in range(5):
with condition:
# 获取底层锁并添加数据到共享资源
shared_resource.append(i)
print(f"Produced: {i}")
# 通知等待该条件的线程
condition.notify()
# 等待其他线程通知并释放底层锁
condition.wait()
time.sleep(1) # 为了更好地观察输出结果,等待一秒钟
def consumer():
global shared_resource
for i in range(5):
with condition:
# 检查共享资源是否为空,为空则等待生产者生产数据
while not shared_resource:
condition.wait()
# 从共享资源中取出数据并打印
data = shared_resource.pop(0)
print(f"Consumed: {data}")
# 通知生产者可以继续生产
condition.notify()
time.sleep(1) # 等待一秒钟
if __name__ == '__main__':
# 创建生产者和消费者线程
producer_thread = threading.Thread(target=producer)
consumer_thread = threading.Thread(target=consumer)
# 启动线程
producer_thread.start()
consumer_thread.start()
# 等待线程结束
producer_thread.join()
consumer_thread.join()
在上面的示例中,生产者线程负责向 shared_resource
中生产数据,消费者线程负责从 shared_resource
中消费数据。通过 threading.Condition
实现了生产者和消费者之间的同步。生产者在生产数据后通知消费者,消费者在消费数据后通知生产者,从而实现了线程间的协作。
版权声明:本文标题:【python3】线程同步机制 Condition 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://m.elefans.com/xitong/1728321391a1153868.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论