前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >python高级线程编程-线程间通信(三)

python高级线程编程-线程间通信(三)

原创
作者头像
玖叁叁
发布2023-04-20 13:11:57
2200
发布2023-04-20 13:11:57
举报
文章被收录于专栏:玖叁叁

除了共享内存和队列之外,Python中的Condition、Event、Semaphore等线程通信机制也可以实现线程间的协作和通信。这些机制可以让线程在某些条件下等待、通知和唤醒其他线程。

例如,下面的示例展示了如何使用Condition来实现线程间的协作和通信:

代码语言:javascript
复制
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中有数据或无数据的情况下进行等待、通知和唤醒。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档