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

Python:进程间的通信,进程的操作队列

进程间的队列:

队列的基本操作:
入队:将数据放到队列尾部

出队:从队列的头部取出一个元素

maxsize:队列中能存放数据个数的上限(整数),一旦达到上限插入会导致阻塞,直到队列中的数据被消费掉      maxsize<=0队列大小没有限制
 

队列常用方法:

Queue提供了一个基本FIFO窗口,初始化队列对象q=Queue()

q.empty()  q为空返回True             q.get() 在队列中取值

q.put() 在队列中放值                q.ful() 队列是不是满了

from queue import Queue
q=Queue(3)#初始化队列对象,最多可接受三条消息
q.put('1')
q.put('2')
print(q.full())#False
q.put('3')
print(q.full())#True
#get取出
print(q.get())
print(q.get())
print(q.get())

print(q.empty())#True
print('现在的消息总量是:',q.qsize())#查看消息数量
try:
    q.put('4',True,2)#True是block值,消息队列没空间写入时,程序进入阻塞状态,2代表阻塞时间timeout,2s后还没空间写入,抛出异常
except:
    print('full!!现有消息数量:%s'%q.qsize())

 

from multiprocessing import Process,Queue
import time,random

list=[1,2,3,4]
#写数据进程执行的代码
def write(q1):
    for i in list:
        print(f'将{i}放进队列中')
        q1.put(i)
        time.sleep(random.random())#随机生成0到1之间的浮点数

#读数据进程执行的代码
def read(q2):
    while True:
        if not q2.empty():
            info=q2.get()
            print(f'从队列中获取{info}')
            time.sleep(random.random())
        else:
            break

if __name__=='__main__':
    #实例化队列对象
    q=Queue()
    #创建进程
    p1=Process(target=write,args=(q,))#先写入
    p2 = Process(target=read, args=(q,))

    #启动
    p1.start()
    p1.join()
    p2.start()
    p2.join()


输出结果为:
将1放进队列中
将2放进队列中
将3放进队列中
将4放进队列中
从队列中获取1
从队列中获取2
从队列中获取3
从队列中获取4

进程间的通信:

from multiprocessing import Process,Queue
import time,random

list=[1,2,3,4]
#在列表中写(放)数据
def write(q):
    for i in list:
        print(f'将{i}放进队列中')
        q.put(i)
        time.sleep(random.random())#随机生成0到1之间的浮点数

#在列表中读(取)数据
def read(q):
    while True:
        if not q.empty():
            info=q.get()
            print(f'从队列中获取{info}')
            time.sleep(random.random())
        else:
            break

if __name__=='__main__':
    #创建队列对象
    q=Queue()
    #创建进程
    p1=Process(target=write,args=(q,))#先写入
    p2 = Process(target=read, args=(q,))

    #启动
    p1.start()
    p1.join()
    p2.start()
    p2.join()

    print('end')

相关文章:

  • 什么是ecovadis验厂?ecovadis验厂的好处?ecovadis验厂的重要意义
  • LangGraph 怎么控制递归次数
  • mapbox进阶,添加鹰眼图控件
  • 从零构建大语言模型全栈开发指南:第三部分:训练与优化技术-3.1.1大规模语料库构建(Wikipedia、Common Crawl清洗与分词)
  • 如何通过BinLog日志恢复被删除的数据
  • Linux下解压patchelf - 0.9.tar.gz 文件方法
  • 导游职业资格考试:从迷茫到清晰的备考指南
  • 如何设计一个订单号生成服务?应该考虑那些问题?
  • 真值表向逻辑函数式的转换原理
  • NIO入门
  • 雨锈代码
  • Java-设计模式
  • vulhub靶场Thales通关攻略
  • 记20个忘10个之九:后缀-th
  • 5.go切片和map
  • SAP错题集
  • Spring MVC:从历史演变到实战入门
  • 【react18】react项目使用mock模拟后台接口
  • cmd命令查看电脑的CPU、内存、存储量
  • 简记_单片机硬件最小系统设计
  • 北白象镇做公司网站哪里有/企业网站管理
  • 清爽网站/百度资源提交
  • 太原营销型网站建设公司/广告制作公司
  • 网站404页面制作/seo的宗旨是什么
  • 中山手机网站制作哪家好/中国制造网网站类型
  • 装饰网站建设公司/夸克搜索入口