当前位置: 首页 > news >正文

python并发编程学习笔记--生产者消费者模型 day02

目录

1. 什么是生产者消费者模型

2. 为什么引入生产者消费者模型

3. 如何实现

4. 示例


1. 什么是生产者消费者模型

  • 生产者 : 程序中负责产生数据的一方
  • 消费者 : 程序中负责处理数据的一方

2. 为什么引入生产者消费者模型

在并发编程中, 生产者消费者模式通过一个容器来解决生产者和消费者之间的强耦合性, 两者之间不再是直接通信, 而是通过堵塞队列来进行通信, 生产者(生产速度快)不必再等待消费者是否处理完数据, 消费者直接从队列中取, 该队列就相当于一个缓冲区, 平衡了生产者和消费者的工作能力, 从而提高了程序整体的数据处理速度

3. 如何实现

通过队列 : 生产者------>队列------->消费者

4. 示例

producer_consumer_spider.py

import queue
import random
import threading
import timeimport blog_spiderdef do_craw(url_queue: queue.Queue, html_queue: queue.Queue):while True:url = url_queue.get()html = blog_spider.craw(url)html_queue.put(html)print(threading.current_thread().name, f"craw {url}", "url_queue.size=", url_queue.qsize())time.sleep(random.randint(1, 2))def do_parse(html_queue: queue.Queue, fout):while True:html = html_queue.get()results = blog_spider.parse(html)for result in results:fout.write(str(result) + '\n')print(threading.current_thread().name, f"results.size", len(results), "html_queue.size=", html_queue.qsize())time.sleep(random.randint(1, 2))if __name__ == '__main__':url_queue = queue.Queue()html_queue = queue.Queue()for url in blog_spider.urls:url_queue.put(url)for idx in range(3):t = threading.Thread(target=do_craw, args=(url_queue, html_queue), name=f"craw{idx}")t.start()fout = open("02.data.txt", "w", 1024, 'utf-8')for idx in range(2):t = threading.Thread(target=do_parse, args=(html_queue, fout), name=f"parse{idx}")t.start()

参考资料:

  • https://www.cnblogs.com/mingerlcm/p/8999004.html
  • Python并发编程之多进程(生产者消费者模型)

相关文章:

python并发编程学习笔记--生产者消费者模型 day02

目录 1. 什么是生产者消费者模型 2. 为什么引入生产者消费者模型 3. 如何实现 4. 示例 1. 什么是生产者消费者模型 生产者 : 程序中负责产生数据的一方消费者 : 程序中负责处理数据的一方 2. 为什么引入生产者消费者模型 在并发编程中, 生产者消费者模式通过一个容器来解…...

彩蛋丨利用R语言脚本实现批量合并Excel表格,再也不用手动点来点去了!

利用R语言脚本实现批量合并Excel表格 在整理数据的时候遇到一个问题:假如有很多个excel表,分别存放了一部分数据,现在想要快速把这些表格的数据汇总到一起,如何用R语言快速完成呢?本文分享一个脚本,能够自动…...

深入学习MYSQL-数据操纵及视图

前言 本博客中的例子和文字大部分来源于书籍《mysql必会知识》,后续会根据更多的书籍不断完善此笔记。 插入操作 可以这种方式向数据库插入两条数据,mysql和pg都支持这种写法。在实战中我们应该更多的使用这种写法,因为数据库的批量操作会…...

深入讲解eMMC简介

1 eMMC是什么 eMMC是embedded MultiMediaCard的简称,即嵌入式多媒体卡,是一种闪存卡的标准,它定义了基于嵌入式多媒体卡的存储系统的物理架构和访问接口及协议,具体由电子设备工程联合委员会JEDEC订立和发布。它是对MMC的一个拓展&#xff0…...

ICV:中国车载超声波雷达市场规模预计2024年可达20亿美元

近年来,由于市场对车辆先进安全功能的需求的增加,汽车超声波传感器市场一直保持稳步增长。ICV估计,车载超声波传感器全球市场预计在2022年至2027年之间以11.5%的复合年增长率增长,这种增长是由越来越多的高级驾驶辅助系…...

PointNet:利用深度学习对点云进行3D分类和语义分割

PointNet:利用深度学习对点云进行3D分类和语义分割 参考自,PointNet: Deep Learning on Point Sets for 3D Classification and Segmentation 代码仓库地址为:https://github.com/charlesq34/pointnet/ 介绍 这次介绍的是一个比较基础的工作…...

第四十二章 Unity 下拉框 (Dropdown) UI

本章节我们介绍下拉框 (Dropdown),我们点击菜单栏“GameObject”->“UI”->“Dropdown”,然后调整它的位置,效果如下 其实它的本质就是一个下拉列表,然后选择列表中的一个选项而已。大家在很多网页中应该可以看到类似的UI元…...

STL常用梳理——STACK、QUEUE

STL——适配器篇 1、ListSTL list 容器介绍list使用 2、适配器介绍3、Deque容器Stack、Queue适配器实现 1、List STL list 容器介绍 STL list 容器,又称双向链表容器,即该容器的底层是以双向链表的形式实现的。这意味着,list 容器中的元素可…...

Unity物理系统基本概念

前言:物理引擎仅仅是对现实物理的一种近似模拟。无论是从运算精度和时间连续性都不够准确。目的只是为了让游戏具备令人信服的物理表现,增强游戏的表现力和用户的沉浸感。 一、刚体Rigidbody 刚体是让物体产生物理行为的主要组件。一旦挂载了Rigidbody组…...

防止表单重复提交的几种方式,演示一个自定义注解方式的实现

防止表单重复提交的几种方式,演示一个自定义注解方式的实现 一、防止表单重复提交的几种方式方式一:Token 机制方式二:去重表(主要是利用 MySQL 的唯一索引机制来实现的)方式三:Redis 的 setnx方式四&#…...

《基于智能手机采集的PPG信号预测血管老化》阅读笔记

目录 一、论文摘要 二、论文十问 Q1: Q1论文试图解决什么问题? Q2: 这是否是一个新的问题? Q3: 这篇文章要验证一个什么科学假设? Q4: 有哪些相关研究?如何归类?谁是这一课题在领域内值得关注的研究员&#xff1f…...

【大数据-调度工具】dolphinscheduler安装和遇到的问题

1.安装 安装步骤按照官网安装即可 官网:DolphinScheduler | 文档中心 (apache.org) 版本:3.1.5 2.踩坑记录 Q1.大文件无法上传 问题描述: 在资源中心中上传文件选择完大文件夹之后,选择确认之后确认按钮转了几圈圈之后就没…...

滑动轨迹生成的思路和代码分享-测试可过极验 90%机率

如有技术侵权、可联系本人下架 由于极验采用人工智能的方式对滑动的轨迹进行的验证,因此如果我们比较随意的生成鼠标滑动轨迹基本是肯定被封的,因此我们要详细分析一下鼠标轨迹的规律, 通之前介绍的调试手段,手工滑动滑块,获取到鼠标滑动轨迹的集合数组如下: [[-37,-41…...

【Linux】项目自动化构建工具make/makefile

🏖️作者:malloc不出对象 ⛺专栏:Linux的学习之路 👦个人简介:一名双非本科院校大二在读的科班编程菜鸟,努力编程只为赶上各位大佬的步伐🙈🙈 目录 前言一、make/makefile的背景二、…...

【系分范文】论软件需求获取技术以及应用

目录 论题论题介绍论文要点理论素材准备范文摘要正文论题 论软件需求获取技术以及应用 论题介绍 软件需求是指用户对新系统在功能、行为、性能、设计约束等方面的期望。软件需求获取是一个确定和理解不同的项目干系人的需求和约束的过程。需求获取是否科学、准备充分,对获取…...

vue2.0中post请求

vue2.0中post请求 三种格式:在vue中axois的用法:1、 multipart/form-data类型2、 x-www-form-urlencoded类型3、 application/json类型 三种格式: ○ Content-Type:x-www-form-urlencoded ○ Content-Type:multipart/form-data ○ Content…...

MySQL双写缓冲区(Doublewrite Buffer)

本文已收录至Github,推荐阅读 👉 Java随想录 文章目录 摘要为什么需要Doublewrite BufferDoublewrite Buffer原理Doublewrite Buffer相关参数总结 摘要 InnoDB是MySQL中一种常用的事务性存储引擎,它具有很多优秀的特性。其中,Dou…...

免费开源的Umi-OCR 文字识别工具

大家好,我是小寻,欢迎关注公众号:工具优选,免费领取优质项目源码和常用工具,还可以加入我的交流群! 如今,在日常生活和工作中,我们经常需要捕捉屏幕截图并识别其中的文本信息。比如别人给你发资料时直接发…...

如何让微信小程序弹窗滚动条设置在最上面

最近发现一个事情搞得很烦&#xff0c;微信小程序的弹窗内容可以滚动的时候&#xff0c;要保证每一次打开都在最上面&#xff0c;研究了一下终于发现了怎么解决 第一步 首先得把你的弹窗里面的内容用scroll-view标签包起来&#xff0c;像这样 <scroll-view style"hei…...

c语言-指针

指针详解 ​ 这段时间在看 Linux内核&#xff0c;深觉C语言功底不扎实&#xff0c;很多代码都看不太懂&#xff0c;深入学习巩固C语言的知识很有必要。先从指针开始。 什么是指针 ​ C语言里&#xff0c;变量存放在内存中&#xff0c;而内存其实就是一组有序字节组成的数组&…...

Cats定律测试终极指南:如何确保类型类实例的正确性

Cats定律测试终极指南&#xff1a;如何确保类型类实例的正确性 【免费下载链接】cats Lightweight, modular, and extensible library for functional programming. 项目地址: https://gitcode.com/gh_mirrors/ca/cats Cats是一个轻量级、模块化、可扩展的函数式编程库&…...

Spring Data测试终极指南:Testcontainers集成测试与Mock数据策略详解

Spring Data测试终极指南&#xff1a;Testcontainers集成测试与Mock数据策略详解 【免费下载链接】spring-data-examples Spring Data Example Projects 项目地址: https://gitcode.com/gh_mirrors/sp/spring-data-examples Spring Data测试是确保数据访问层可靠性的关键…...

快速验证机器人抓取创意:用快马平台十分钟构建openclaw技能演示原型

最近在研究机器人抓取技能时&#xff0c;发现openclaw技能大全这个知识库特别实用。但每次想验证一个新抓取动作的可行性&#xff0c;都要从头搭建仿真环境&#xff0c;实在太费时间了。后来尝试用InsCode(快马)平台快速生成原型&#xff0c;十分钟就能看到效果&#xff0c;分享…...

开源可部署剧本AI|像素剧本圣殿镜像免配置+Qwen2.5本地化教程

开源可部署剧本AI&#xff5c;像素剧本圣殿镜像免配置Qwen2.5本地化教程 1. 像素剧本圣殿简介 Pixel Script Temple&#xff08;像素剧本圣殿&#xff09;是一款基于Qwen2.5-14B-Instruct模型深度微调的专业剧本创作工具。这个开源项目将强大的AI推理能力与独特的8-Bit复古美…...

什么是设备管理系统?2026最新讲解!

设备管理系统&#xff1a;从传统台账到2026年“智慧中枢”的演进回顾设备管理的发展&#xff0c;从依赖纸质记录的手工台账时代&#xff0c;到以Excel和简单软件为代表的电子化时代&#xff0c;再到如今集感知、分析、决策于一体的智能化时代&#xff0c;其核心驱动力已发生根本…...

AI机器视觉+振镜控制:基于OpenCV的无序工件全自动定位打标

引言 工业激光打标场景中,无序工件的定位难题一直制约着自动化产能提升——传统工装定位换型成本高、人工摆料误差大,固定视觉方案无法适配工件360旋转姿态。本文提出一套基于OpenCV机器视觉+振镜联动的全自动定位打标方案,无需专用工装,通过AI视觉实现无序工件亚像素级定位…...

小白友好!YOLO11镜像部署教程:无需独立显卡也能体验目标检测

小白友好&#xff01;YOLO11镜像部署教程&#xff1a;无需独立显卡也能体验目标检测 1. 引言&#xff1a;为什么选择YOLO11镜像 目标检测是计算机视觉中最基础也最实用的技术之一&#xff0c;而YOLO系列算法以其快速高效著称。最新发布的YOLO11在保持实时性的同时&#xff0c…...

Awesome Rust核心库精选:异步编程与网络开发

Awesome Rust核心库精选&#xff1a;异步编程与网络开发 本文深入探讨了Rust生态系统中的核心库&#xff0c;重点分析了异步运行时&#xff08;Tokio与async-std&#xff09;、网络编程库、HTTP客户端/服务器框架、数据序列化工具链以及密码学与安全相关库。通过对比分析各库的…...

Fluxion多语言支持终极指南:从.lang文件到本地化shell脚本的完整实现

Fluxion多语言支持终极指南&#xff1a;从.lang文件到本地化shell脚本的完整实现 【免费下载链接】fluxion Fluxion is a remake of linset by vk496 with enhanced functionality. 项目地址: https://gitcode.com/gh_mirrors/fl/fluxion Fluxion是一款功能强大的无线网…...

如何用League-Toolkit智能助手解决英雄联盟5大核心痛点?效率提升指南

如何用League-Toolkit智能助手解决英雄联盟5大核心痛点&#xff1f;效率提升指南 【免费下载链接】League-Toolkit An all-in-one toolkit for LeagueClient. Gathering power &#x1f680;. 项目地址: https://gitcode.com/gh_mirrors/le/League-Toolkit 在快节奏的英…...