Python多线程生产者消费者模型实现详解

Mia
Mia
发布时间:2026-10-13| 2人浏览过
原创

本文通过Python代码详解经典的生产者与消费者线程同步问题。核心逻辑为缓冲池容量限制为1,利用Lock锁确保资源互斥访问。代码展示了多生产者与多消费者交替执行的过程,重点解析加锁、判断缓冲池状态及释放锁的操作流程,帮助理解并发编程中的资源同步机制。

本文通过一个完整的Python实例,详细讲解生产者与消费者问题的实现方法,供读者参考学习。

生产者和消费者问题是多线程同步的经典案例。假设存在一个缓冲池(此处使用列表模拟),生产者负责向其中添加数据,消费者负责从中取出数据。基本规则如下:当缓冲池为空时,生产者才能放入数据;当缓冲池非空时,消费者才能取出数据。为简化模型,设定缓冲池中最多仅能容纳一个产品。由于生产者和消费者共同操作同一资源(缓冲池),每次操作时必须获取锁对象以确保资源同步,操作完成后需释放锁。在Python中实现该逻辑需要继承Thread类,并获取锁对象,具体代码实现如下:

# -*- coding:utf-8 -*-
#! python2
from threading import Thread
from threading import Lock
import time,random
pro_list = []
lock = Lock()
class Producer(Thread):
  def run(self):
    global pro_list
    while True:
      i = random.randint(0, 100)
      lock.acquire()
      if len(pro_list) > 0:
        print "!--product still in list, wait consumer to get it.."
      else:
        pro_list.append(i)
        print ":::Producer put:", pro_list[0]
      lock.release()
      time.sleep(2)
class Consumer(Thread):
  def run(self):
    global pro_list
    while True:
      lock.acquire()
      if len(pro_list) == 0:
        print "!--No product now, wait producer put in..."
      else:
        print ":::Consumer fetch:", pro_list[0]
        pro_list.pop(0)
      lock.release()
      time.sleep(2)
Producer().start()
Producer().start()
Consumer().start()
Producer().start()
Producer().start()
Consumer().start()
Consumer().start()

以下代码示例使用了多个生产者线程和多个消费者线程共同操作缓冲池,部分执行结果展示如下:

:::Producer put: 78 !--product still in list, wait consumer to get it.. :::Consumer fetch: 78 :::Producer put: 99 !--product still in list, wait consumer to get it.. :::Consumer fetch: 99 !--No product now, wait producer put in... :::Producer put: 12 :::Consumer fetch: 12 :::Producer put: 91 !--product still in list, wait consumer to get it.. !--product still in list, wait consumer to get it.. :::Consumer fetch: 91 !--No product now, wait producer put in... :::Producer put: 63 :::Consumer fetch: 63 :::Producer put: 85 !--product still in list, wait consumer to get it.. !--product still in list, wait consumer to get it.. :::Consumer fetch: 85 !--No product now, wait producer put in... :::Producer put: 1 :::Consumer fetch: 1 :::Producer put: 26 !--product still in list, wait consumer to get it.. !--product still in list, wait consumer to get it.. :::Consumer fetch: 26 !--No product now, wait producer put in... :::Producer put: 8 :::Consumer fetch: 8 :::Producer put: 19 !--product still in list, wait consumer to get it.. !--product still in list, wait consumer to get it.. :::Consumer fetch: 19 !--No product now, wait producer put in... :::Producer put: 74 !--product still in list, wait consumer to get it.. :::Consumer fetch: 74 :::Producer put: 50 !--product still in list, wait consumer to get it.. :::Consumer fetch: 50 !--No product now, wait producer put in... :::Producer put: 97 :::Consumer fetch: 97 :::Producer put: 69 !--product still in list, wait consumer to get it.. !--product still in list, wait consumer to get it.. :::Consumer fetch: 69 !--No product now, wait producer put in... :::Producer put: 41 !--product still in list, wait consumer to get it.. :::Consumer fetch: 41 :::Producer put: 6 !--product still in list, wait consumer to get it.. :::Consumer fetch: 6 !--No product now, wait producer put in...

如果您对Python编程感兴趣,可进一步查阅本站相关专题,包括《Python数据结构与算法教程》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》、《Python入门与进阶经典教程》以及《Python数学运算技巧总结》。

希望本文提供的代码示例和解析对您的Python程序设计有所帮助。

相关标签:

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

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 算法库。