【Python零基础入门篇 · 34】:进程间的通信-Queue、进程池的构建

【Python爬虫(34)】Python多进程编程:开启高效并行世界的钥匙 本文围绕 Python 多进程展开,深入剖析进程概念,阐述其动态性、并发性等特征及结构组成。介绍 Python 多进程模块 multiprocessing,包括绕过 GIL 限制、底层实现及丰富通信和同步机制。详细讲解创建与启动进程的方式,如用 Process 类创建单个进程、用 Pool 类管理进程池。还介绍 Queue 和 Pipe 两种进程间通信机制,最后对比进程和线程在定义、资源占用、通信等方面差异,并给出应用场景选择建议。 阅读详情

进程间的通信-Queue


可以使用multiprocessing模块的Queue实现了进程之间的数据传递,Queue本身是一个消息队列。

初始化Queue()对象时(例如:q=Queue()),若括号中没有指定最大可接收的消息数量,或数量为负值,那么就代表可接受的消息数量没有上限(直到内存的尽头)。

队列的基本操作

Queue.put():入队,放入数据
Queue.get():出队,取出数据
Queue.size():返回当前队列包含的消息数量
Queue.empty():如果队列为空,返回True,反之False ;
Queue.full():如果队列满了,返回True, 反之False。
在这里插入图片描述

  • 进程操作队列,直接使用进程自带的Queue
    在这里插入图片描述

进程池的构建


当需要创建的子进程数量不多时,可以直接利用multiprocessing中的Process动态成生多个进程,但如果是上百甚至上千个目标,手动的去创建进程的工作量巨大,此时就可以用到multiprocessing模块提供的Pool方法。

初始化Pool时,可以指定一个最大进程数,当有新的请求提交到Pool中时,如果池还没有满,那么就会创建一个新的进程用来执行该请求;但如果池中的进程数已经达到指定的最大值,那么该请求就会等待,直到池中有进程结束,才会用之前的进程来执行新的任务。

概念

定于一个进程池,在里面放上固定数量的进程,有需求就拿池子中的进程来处理任务,处理完毕,进程并不关闭,而是将这个进程再放回池子中继续等待任务。

方法

  • p.apply_async(调用的目标,传递的值)——异步非阻塞,不同等待当前进程执行,随时根据系统调度来进行程序切换,如果异步提交任务,等进程池内任务处理完,需要用get()来收集结果.
  • p.close()——关闭进程池
  • p.join()——主进程阻塞,等待所有工作进程退出,只能再close()后调用
    在这里插入图片描述
Python高级编程之消息队列(Queue)与进程池(Pool)实例详解 主要介绍了Python高级编程之消息队列(Queue)与进程池(Pool),结合实例形式详细分析了Python消息队列与进程池的相关原理、使用技巧与操作注意事项,需要的朋友可以参考下 立即下载

相关推荐

CXL Virtual Hierarchy (VH) Enumeration理解

在 CXL 3.0 协议中,CXL Virtual Hierarchy (VH) Enumeration 是一种针对 CXL 虚拟层级(Virtual Hierarchy) 设计的设备枚举机制,它允许软件将物理连接的 CXL 设备抽象为多个逻辑层级(虚拟层级),从而实现更灵活的资源管理和拓扑扩展。与传统的 PCIe 枚举相比,CXL VH 枚举在协议特性、拓扑抽象和资源分配机制上有显著差异。本质:VH 是一个逻辑上的设备层级结构,可能与物理连接拓扑不同。

Summer的博客 1001

python多进程消息队列_Python基础-fork/多进程/Process/进程池/消息队列(Queue)(18)

fork在unix/linux操作系统中,提供了一个fork()系统函数,它非常特殊。普通的函数调用,调用一次,返回一次,但是fork()调用一次,返回两次。因为操作系统自动把当前进程(父进程)复制了一份(子进程),然后分别在父进程和子进程内返回。子进程永远返回0,父进程返回子进程的ID。一个父进程可以fork()出很多个子进程。因此,父进程要记下每个子进程的ID,而子进程只需要调用getppid...

weixin_39864387的博客 295

2021英伟达暑期实习面经(芯片设计)

2021英伟达暑期实习面经(芯片设计前端/DFT) 准备了将近一个月,终于赶在三月的最后一天拿到了offer,暑期实习算是上岸了,后面还有阿里/华为等一些国内公司的面试,但既然拿到了nv的offer,后面的先就当积累面试经验吧~ 网上关于nv的实习or秋招面经很少,硬件岗的更少(约等于没有好吧)。之前准备面试的时候,在网上找了半天,好像就只在牛客网上见过一篇关于nv硬件岗的面经,幸好当时认真看了哈哈。所以既然幸运上岸了,想趁自己还记得,record一下,希望可以帮到有缘人呀~ 好了,废话不多说,开始正题。

Hadleysjtu的博客 1万+

Django Celery 任务增加多个队列,优先级设置,apply_async 函数详解

在settings.py 设置 队列 Python # settings.py from kombu import Exchange, Queue CELERY_QUEUES = ( Queue('task_html', Exchang...

从零开始学习python --zeropython 2869

STM32开发 -- LIS3DH三轴加速度计开发详解

这次要讲一下LIS3DH三轴加速度计的开发使用,之前是有讲过 MPU6050开发 的,但当时是在Linux下做的。额,还是个半成品,哈哈。现在手边有STM32的开发板,可以实实在在的来实现以下卡尔曼滤波了。 一、LIS3DH初识 依照惯例,先看一下手册,大致先了解一下,LIS3DH是什么模块。 下载:LIS3DH datasheet 1、描述 LIS3DH是一款超低功耗高性能三轴线性加速度计,属于...

不积跬步,无以至千里 2万+

MIKE21 教程 3.2 随空间变化的网格文件制作(.dfsu文件制作) 曼宁值网格文件制作

上一节讲解了如何制作时间序列文件。本节讲解如何制作仅随空间变化的文件。 目录 1 数据准备 1.1 基于地形设置 1.2 基于地形水深设置: 2 数据导入 3 数据导出

Hello Word 3940

Python进程池未并行执行的一个小坑

因为项目原因,所以选择了使用python作为工程开发的主语言。工程上在数据发送时,需要将一批数据快速的进行发送,所以很自然的就想到了Java中的多线程。但是坑爹的是python中的多线程是的假的多线程,python进程受GIL锁控制,只能有一个线程在运行。所以python中如果要做到类似Java中的多线程的功能的话,需要使用到python的进程池功能。 参考: python中多线程是假的 python多进程中的Manager的作用 ...

淡定一生2333的博客 3264

【知识点讲解】大模型参数量与计算量(FLOPs)估算方法

指标参数量 (Params)计算量 (FLOPs)含义模型的大小,静态模型的计算复杂度,动态决定因素模型结构(宽度、深度)模型结构 +输入数据(B, S)影响内存占用、磁盘空间运行速度、能耗单位M (百万), B (十亿)工具thopptflopstorchinfothopptflopsfvcore重要提示FLOPs ≠ 速度:FLOPs 是理论计算量。实际速度还受内存带宽 (Memory Bandwidth)并行度硬件架构等因素严重影响。

AI浩 2095

multiprocess模块使用进程池调用apply_async()提交的函数及回调函数不执行问题

使用multiprocesss模块遇到各种各样的问题,这次遇到的问题是调用进程池对象的 apply_async() 方法,往进程池传递一个实例方法(该实例方法里有一段代码是往同步队列里放入数据),然后发现往进程池扔的任务(即实例方法)不会被执行,回调方法也不执行。心塞~ 以下是出现问题的代码 import ctypes import datetime import random import ti...

ITMAN009的博客 3524

基于fme和python-docx第三方库批量更新不动产调查表

最近应朋友需要批量更新在不动产成果中提交的各种word报表中的指定数据,根据初步的了解,我做了一个基于fme软件和python-docx第三方库进行一个批量的更新方案。

weixin_43229258的博客 1240

OSError We couldn‘t connect to https://huggingface.co to load file, couldn‘t find it chatglm3-6b解决方案

本文主要介绍了OSError: We couldn’t connect to https://huggingface.co to load this file, couldn’t find it in the cached files and it looks like THUDM/chatglm3-6b is not the path to a directory containing a file named config.json.解决方案,希望能对学习python的同学们有所帮助。

weixin_43178406的博客 5万+

python apply_async数据量大不执行_python - 使用Pool()。apply_async在大型计算期间进行多处理死锁 - 堆栈内存溢出...

我在Python 3.7.3中遇到问题,在处理大型计算任务时,我的多处理操作(使用Queue,Pool和apply_async)会死锁。对于小型计算,此多处理任务可以正常工作。 但是,在处理较大的流程时,多处理任务将完全停止或死锁,而不会退出流程! 我读到,如果您“无限制地增加队列,并且您正在加入一个正在等待队列中的空间的子进程,则您的主进程被拖延以等待该进程完成,就会发生这种情况。永不。”我...

weixin_39694264的博客 933

4、基于球面波展开的近场/远场变换技术解析

本文深入解析了基于球面波展开的近场/远场变换技术,涵盖坐标系统选择、截断测量处理、高级SWE方法及实际应用场景。重点介绍了广义SWE、全探头补偿、平移SNF测量(TSWE)等关键技术,结合吸收材料与导电地板系统的误差处理方案,系统总结了各类方法的优缺点与适用场景,并通过流程图和案例分析展示了技术应用路径。该技术在汽车、通信和航空航天领域的天线测量中具有重要价值,可显著提升测量效率与精度。

dell8的博客 255

第34课:Python|多进程、进程池、线程池原理与企业级实战用法

Python多进程编程与并发处理摘要 本文系统介绍了Python多进程编程的核心知识,主要内容包括: 多进程基础:通过multiprocessing.Process创建进程,绕过GIL限制实现真正并行,每个进程拥有独立内存空间。 进程间通信(IPC): Queue实现进程安全的数据传递 Pipe建立双向通信管道 Value/Array共享内存高效传输数据 Manager提供高级共享对象(dict/list等) 进程池(Pool): Pool.map批量同步处理任务 apply_async实现异步非阻塞...

Java 后端|Python|AI 实战博主。专注微服务、分布式、大模型应用开发,输出可落地项目、源码剖析与面试总结。用通俗文字拆解技术难点,记录开发路上的学习与踩坑,期待和大家一起交流成长。 521

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

python进程间通信

3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!**

2301_82241859的博客 899

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

Python(进程间通信)

1. 队列 import multiprocessing # 线程通信=====(队列) ---- from queue import Queue # 进程池中进程通信=====(队列) --- from multiprocess.Manager import Queue # 多进程通信=====(队列) ---- from multiprocess import Queue import tim...

qq_43281189的博客 1036

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

Python实现进程同步和通信

本文介绍了Python中实现进程的同步和通信。使多进程间得以共享资源。 具体介绍了Lock, Semaphore,Queue,Pipe,Manager。

u014556057的专栏 1万+

Python multiprocessing.Queue 实战详解:多进程通信的高效利器

multiprocessing.Queue 是 Python multiprocessing 模块提供的进程间通信(IPC)工具之一,它允许不同的进程之间安全地传输数据。它与 queue.Queue 类似,但可以在多个进程之间共享。1. multiprocessing.Queue 基本用法multiprocessing.Q...

cnzzs的博客 1099

2024年最全python进程间通信

添加数据函数print(“进程(%s)正在写入…”%(os.getpid()))print(“%s被写入到队列中”%(url))#读取数据函数print(“进程(%s)正在读取…”%(os.getpid()))print(“从队列中提取到:%s”%(url))if==“”:进程(21203)正在读取…进程(21201)正在写入…进程(21202)正在写入…ur1被写入到队列中从队列中提取到:ur1ur5被写入到队列中从队列中提取到:ur5ur2被写入到队列中。

2401_84691951的博客 132

python学习笔记(进程间通信、多进程和多线程总结)

进程间通信之生产者消费者模型

mkgdjing的博客 2650

python中的进程间的通信之管道Pipe

代码描述: $ 1). Pipe管道,进程间通信的方式, l类似于 ls | wc -l; 2). Pipe()返回两个连接对象, 分别代表管道的两边; 3). 管道通信操作的方法: send(), recv; 4). 管道间的通信是双向的, 既可以发送,也可以接收; import multiprocessing # 线程通信=====(队列) ---- from queue import Que...

qq_40723809的博客 1222

python 进程间通信_Python并发编程—进程间通信

进程间通信(IPC)1.必要性: 进程间空间独立,资源不共享,此时在需要进程间数据传输时就需要特定的手段进行数据通信。2.常用进程间通信方法:管道通信、消息队列、共享内存、信号量管道通信(Pipe)1.通信原理:在内存中开辟管道空间,生成管道操作对象,多个进程使用同一个管道对象进行读写即可实现通信2.实现方法from multiprocessing import Pipefd1,fd2 = Pip...

weixin_39948442的博客 99

python10_python10

一、多进程multiprocessingmultiprocessing包是Python中的多进程管理包。与threading.Thread类似,它可以利用multiprocessing.Process对象来创建一个进程。该Process对象与Thread对象的用法相同,也有start(), run(), join()的方法。1 importmultiprocessing,threading2 im...

weixin_39929138的博客 144

day 34 共享数据,初识进程池,进程池中的其他方法,进程池中的回调函数,线程的概念...

共享数据---了解 from multiprocessing import Manager 数据共享:速度很慢,牵扯到锁的问题 可以使用数据库来解决数据共享的问题 进程间数据是独立的,可以借助于队列或管道实现通信,二者都是基于消息传递的 虽然进程间数据独立,但可以通过Manager实现数据共享,事实上Manager的功能远不止于此 A man...

anyan5612的博客 161
上一篇: 【Python零基础入门篇 · 33】:进程的基础操作、进程间的通信-Queue、进程池的构建
下一篇: 【Python零基础入门篇 · 35】:协程和IO操作的简单理解
街 三 仔
街 三 仔 新星创作者: python技术领域 新星创作者: python技术领域 领域专家: Python技术领域 领域专家: Python技术领域
博客等级 码龄5年 1万+粉丝 338原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

街 三 仔

你的鼓励是我创作的最大动力~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值