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

Python 笔记之进程通信

'''
当需要创建的子进程数量不多时,可以直接利用multiprocessing中的Process动态生成多个进程
但是如果是上百个或者上千个目标,手动去创建进程的工作量很大,此时就可以利用到Multiprocessing模块提供的Pool方法
初始化pool时,可以指定一个最大进程数,当有新的请求提交到Pool中时,如果池还没有满
那么就会创建一个新的进程来执行该请求;但是如果池中的进程数量已经达到指定的最大值,那么该请求会等待
直到池中有进程结束,才会创建新的进程来执行
阻塞式:添加一个执行一个,如果一个任务不结束宁外一个任务就进不来
非阻塞式:全部添加到队列中,立刻返回,并没有等待其它进程执行完毕,但是回调函数是等地啊任务完成之后才调用。
好处:设置进程数量,达到进程的复用
'''
'''
pool=Pool(max) 创建进程池对象
pool.apply()阻塞的
pool.apply_async()非阻塞的
pool.close()停止添加进程
pool.join()#让主进程让步
queue 进程通信
'''
import os
from multiprocessing import Pool
#非阻塞式进程
import time
from random import random
from multiprocessing import Queueq=Queue(6)
q.put('A')
q.put('B')
q.put('C')
q.put('D')
# q.put('E')print(q.qsize())
if not q.full():q.put('F',timeout=3)#put() 如果queue满了则只能等待,除非有空地则添加成功
else:print('队列已满')
print('++++++++++')
print(q.get())
print(q.get())
print('++++++++++')
# print(q.get())
# print(q.get())
# print(q.get())
# print(q.get(timeout=2))print(q.put_nowait("E"))
print('++++++++++')
print(q.get_nowait())
print('---')
#进程通信
from multiprocessing import Process,Queue
import timedef download(q):images=['girl.jpg','boy.jpg','man.jpg']for image in images:print("正在下载:%s"%image)time.sleep(1)q.put(image)def getfile(q):while True:try:file=q.get(timeout=5)print(f'{file}保存成功')except:print("全部保存成功")breakif __name__=='__main__':q = Queue(5)p1=Process(target=download,args=(q,))p2=Process(target=getfile,args=(q,))p1.start()p2.start()p2.join()p1.join()
#进程,线程
#Process类
#def func(n):
#    pass
#创建进程:p=Process(target=func,name='',args=(1,),kwargs='')
#启动p.start()
#run()
from multiprocessing import Process
class MyProcess(Process):def run(self):passp=MyProcess()
p.start()
#进程的数据共享
n=0
#进程池:Pool
from multiprocessing import pool
p=pool(5)
#阻塞式 apply(func,args,kwargs)
#非阻塞式 apply_async(fun,args,kwargs,callback=函数)
# 进程间的通信 queue
from multiprocessing import Queue
q=Queue(4)
q.put()
q.get()
q.qsize()
q.empty()
q.full()
#线程关系
# 包含关系
#进程里面可以存着多个线程,多个线程可以共用进程资源
from threading import Thread
t=Thread(target=func,name='',args=(1,),kwargs='')
t.start()
http://www.lryc.cn/news/499768.html

相关文章:

  • 【Transformer序列预测】Pytorch中构建Transformer对序列进行预测源代码
  • 生产者-消费者模式:多线程并发协作的经典案例
  • 数据库-mysql(基本语句)
  • android12L super.img 解压缩及其挂载到ubuntu18.04
  • flask简易版的后端服务创建接口(python)
  • 小程序入门学习(四)之全局配置
  • PHP使用RabbitMQ(正常连接与开启SSL验证后的连接)
  • 轻量级视觉骨干网络 MobileMamba: Lightweight Multi-Receptive Visual Mamba Network
  • 科技云报到:数智化转型风高浪急,天翼云如何助力产业踏浪而行?
  • dockerfile部署前后端(vue+springboot)
  • c语言的思维导图
  • Android 拍照(有无存储权限两种方案,兼容Q及以上版本)
  • MongoDB在自动化设备上的应用示例
  • draggable插件——实现元素的拖动排序——拖动和不可拖动的两种情况处理
  • Redux的使用
  • 【JAVA】Java高级:多数据源管理与Sharding:数据分片(Sharding)技术的实现与实践
  • ASP.NET Core 9.0 静态资产传递优化 (MapStaticAssets )
  • LeetCode刷题day18——贪心
  • MATLAB Simulink® - 智能分拣系统
  • linuxCNC(五)HAL驱动的指令介绍
  • STM32 进阶 定时器3 通用定时器 案例2:测量PWM的频率/周期
  • 第一节、电路连接【51单片机-TB6600驱动器-步进电机教程】
  • 【通俗理解】Koopman算符与非线性动力系统分析
  • mybatis plus打印sql日志
  • ObjectMapper
  • 新增白名单赋予应用安装权限
  • 传奇996_51——脱下装备,附加属性设为0
  • 【Mac】安装Gradle
  • MySQL中的redoLog
  • Windows 安装 MySQL