Python Event实现线程同步:生产者与消费者模型详解

清欢
清欢
发布时间:2026-10-15| 5人浏览过
原创

本文通过Python中的Event对象,详细演示了如何利用事件机制实现线程间的同步通信。以生产者线程和工作者线程为例,展示了如何在10次交互中通过wait和set方法协调资源状态,确保线程安全与执行顺序。

Python Event线程同步概述

前言

在Python多线程编程中,Event对象是实现线程间同步的常用手段。本文将通过一个典型的生产者与消费者模型,具体演示如何利用Event对象完成10次线程间的同步交互。

核心代码实现分析

import threading
from threading import Event, Thread
import time
import random
from time import sleep
 
pevent = Event() #默认是没有事件的
pevent.clear()
 
cevent = Event() 
cevent.clear()
 
runtimes = 10
mutex_lock = threading.Lock()
 
 
class ProducerThread (threading.Thread):
    def __init__(self, name, runflag):
        threading.Thread.__init__(self)
        self.name = name
        self.runflag = runflag
        self.continueflag = Event()
        self.continueflag.set()
        
    def run(self):
        global runtimes  
        sleep(1)
        print ("开始线程:" + self.name)
        while self.continueflag.isSet():
            print("wait consumer ...")
            if runtimes == 0:
                self.continueflag.clear()
                break
            pevent.wait()
            print("come an consumer ...")
            mutex_lock.acquire()
            runtimes = runtimes - 1
            mutex_lock.release()
            pevent.clear()
            sleep(1)
            cevent.set()
        print ("退出线程:" + self.name)
        self.runflag.set()
 
class ConsumerThread (threading.Thread):
    def __init__(self,name, runflag):
        threading.Thread.__init__(self)
        self.name = name
        self.runflag = runflag
        self.continueflag = Event()
        self.continueflag.set()
        
    def run(self):
        global runtimes 
        print ("开始线程:" + self.name)
        while self.continueflag.isSet():
            if 0 == runtimes:
                self.continueflag.clear() 
                pevent.set()
                break
            print("I want to consum ... ", runtimes)
            pevent.set() #通知生产者要消费
            cevent.wait()
            cevent.clear()
            sleep(1)
        print ("退出线程:" + self.name)
        self.runflag.set()
 
def test_pthread():
    runflag = Event() 
    pt = ProducerThread("producer", runflag)
    ct = ConsumerThread("consumer", runflag)
    pt.start()
    ct.start()
    pt.join()
    ct.join()
    runflag.wait()
 
if __name__ == '__main__':
    print('===============begin=================')
    test_pthread()
    print('===============end=================')

运行结果展示

以下是程序运行后的输出结果:

至此,关于Python中Event实现线程间同步的介绍已完成。如需了解更多Event在线程同步中的应用,欢迎查阅本站历史文章或继续阅读后续相关内容。感谢大家的支持!

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。