首页后端开发Pythonpython高级线程编程-线程间通信(三)

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

时间2023-04-26 12:21:01发布访客分类Python浏览528
导读:除了共享内存和队列之外,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

若转载请注明出处: python高级线程编程-线程间通信(三)
本文地址: https://pptw.com/jishu/9222.html
python高级线程编程-线程安全的数据结构(二) MyWebServer小巧的ASP环境集成软件V3.8.40

游客 回复需填写必要信息