python高级线程编程-线程间通信(三)
导读:除了共享内存和队列之外,Python中的Condition、Event、Semaphore等线程通信机制也可以实现线程间的协作和通信。这些机制可以让线程在某些条件下等待、通知和唤醒其他线程。例如,下面的示例展示了如何使用Condition来...
除了共享内存和队列之外,Python中的Condition、Event、Semaphore等线程通信机制也可以实现线程间的协作和通信。这些机制可以让线程在某些条件下等待、通知和唤醒其他线程。
例如,下面的示例展示了如何使用Condition来实现线程间的协作和通信:
import threading
# 条件变量
cond = threading.Condition()
# 共享数据
buffer = []
# 生产者线程函数
def producer():
for i in range(5):
with cond:
item = "Item {
}
".format(i)
buffer.append(item)
print("Produced {
}
".format(item))
cond.notifyAll()
# 消费者线程函数
def consumer():
while True:
with cond:
if len(buffer) == 0:
cond.wait()
item = buffer.pop(0)
if item is None:
break
print("Consumed {
}
".format(item))
# 创建生产者和消费者线程
t1 = threading.Thread(target=producer)
t2 = threading.Thread(target=consumer)
# 启动线程
t1.start()
t2.start()
# 等待生产者线程结束
t1.join()
# 停止消费者线程
with cond:
buffer.append(None)
cond.notifyAll()
t2.join()
在上面的示例中,我们定义了一个条件变量cond和一个共享数据buffer。生产者线程向buffer中添加数据,并通知等待的消费者线程;消费者线程等待buffer中有数据可供消费,并从buffer中取出数据进行处理。通过使用条件变量,我们可以让生产者和消费者线程在buffer中有数据或无数据的情况下进行等待、通知和唤醒。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: python高级线程编程-线程间通信(三)
本文地址: https://pptw.com/jishu/9222.html