进程间通信-Queue 消息队列 先进先出

Process之间有时需要通信,操作系统提供了很多机制来实现进程间的通信。

 

multiprocessing模块的Queue实现多进程之间的数据传递,Queue本身是一个消息列队程序

 

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

  • Queue.qsize():返回当前队列包含的消息数量;
  • Queue.empty():如果队列为空,返回True,反之False ;
  • Queue.full():如果队列满了,返回True,反之False;
  • Queue.get([block[, timeout]]):获取队列中的一条消息,然后将其从列队中移除,block默认值为True;

1)如果block使用默认值,且没有设置timeout(单位秒),消息列队如果为空,此时程序将被阻塞(停在读取状态),直到从消息列队读到消息为止,如果设置了timeout,则会等待timeout秒,若还没读取到任何消息,则抛出"Queue.Empty"异常;

2)如果block值为False,消息列队如果为空,则会立刻抛出"Queue.Empty"异常;

  • Queue.get_nowait():相当Queue.get(False);
  • Queue.put(item,[block[, timeout]]):将item消息写入队列,block默认值为True;

1)如果block使用默认值,且没有设置timeout(单位秒),消息列队如果已经没有空间可写入,此时程序将被阻塞(停在写入状态),直到从消息列队腾出空间为止,如果设置了timeout,则会等待timeout秒,若还没空间,则抛出"Queue.Full"异常;

2)如果block值为False,消息列队如果没有空间可写入,则会立刻抛出"Queue.Full"异常;

  • Queue.put_nowait(item):相当Queue.put(item, False);

 

from multiprocessing import Queue

import time

 

q = Queue(3)  # 参数表明这个队列最多只能保存3条数据

 

print("判断队列是否为空:%s" % q.empty())

print("判断队列是否为满:%s" % q.full())

 

q.put(100)

print("新添加了一条数据 100")

 

# print("当前队列中数据的个数:%d" % q.qsize())

 

q.put(200)

print("新添加了一条数据 200")

q.put(300)

print("新添加了一条数据 300")

# q.put(400)  # 默认是阻塞的,表示如果队列已满,则等待,直到有空位置才能继续添加新的数据

# print("新添加了一条数据 400")

 

q.put(400, timeout=3)  # timeout参数表示最长等待的时间,超时时间,单位秒,超过时间后,如果还不能添加,则抛出异常信息

print("新添加了一条数据 400")

 

time.sleep(0.1)

 

print("判断队列是否为空:%s" % q.empty())

print("判断队列是否为满:%s" % q.full())

 

ret= q.get()

print(ret)

ret= q.get()

print(ret)

ret= q.get()

print(ret)

# ret = q.get() # 默认是阻塞的,表示如果队列已空,则等待,直到有新的数据出现,才能继续取出元素

#print(ret)

ret = q.get(timeout=3)  # timeout参数表示最长等待的时间,超时时间,单位秒,超过时间后,如果还不能取出,则抛出异常信息

print(ret)

 

print("判断队列是否为空:%s" % q.empty())

print("判断队列是否为满:%s" % q.full())

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/474187.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

过压保护(1)

征一个简单、可靠的电源过压保护电路 http://www.amobbs.com/thread-5542005-1-1.html 防过压:过压之后TVS导通,电流由正极流经自恢复保险再流经TVS到负极,自恢复保险升温,阻值变大,相当于断开,等电流撤去&…

spring boot+thmyleaf ModelAndView页面传值

如上图所示,当我们从后台通过ModelAndView进行传值的时候, 一定要注意,千万不要向上图那样开头加上反斜杠,开头加反斜杠,系统会默认为相对路径, 虽然也能找到相应的视图(html)&#…

python中的进程, 线程

进程是操作系统分配资源的最小单位 线程是操作系统调度执行的最小单位 定义的不同 进程是系统进行资源分配的最小单位. 线程是进程的一个实体,是CPU进行调度的基本单位,它是比进程更小的能独立运行的基本单位.线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(…

LeetCode 214. 最短回文串(字符串哈希)

文章目录1. 题目2. 解题1. 题目 给定一个字符串 s,你可以通过在字符串前面添加字符将其转换为回文串。 找到并返回可以用这种方式转换的最短回文串。 示例 1: 输入: "aacecaaa" 输出: "aaacecaaa"示例 2: 输入: "abcd" 输出: "…

转:c#委托事件实现窗体传值通信

C#实现Winform窗口间数据交互的三种方法介绍 2010-03-15 来自:CNBLOG 字体大小:【大 中 小】摘要:本文分别介绍C#实现Winform窗口间数据交互的三种方法:修改子窗体的构造函数、给窗体添加属性或方法、通过委托的方法&#xff0c…

python中的多线程-threading

python的thread模块是比较底层的模块,python的threading模块是对thread做了一些包装的,可以更加方便的被使用 创建多线程: from threading import Thread import time def sing(): for i in range(3): print("唱歌") time.sleep(…

LeetCode 1566. 重复至少 K 次且长度为 M 的模式

文章目录1. 题目2. 解题1. 题目 给你一个正整数数组 arr,请你找出一个长度为 m 且在数组中至少重复 k 次的模式。 模式 是由一个或多个值组成的子数组(连续的子序列),连续 重复多次但 不重叠 。 模式由其长度和重复次数定义。 …

R语言的安装与配置

一、什么是 R 语言 R 编程语言被广泛应用在统计科学和商业领域。 在各种编程语言排名中 R 语言的排名都很靠前。 它是一款集成了数据操作、统计,以及可视化功能的优秀开源软件。免费,开源是 R 重要的特点。 二、什么是 RStudio RStudio 是用亍 R 编程的…

python中的多线程-共享全局变量

在一个进程内的所有线程共享全局变量,能够在不适用其他方式的前提下完成多线程之间的数据共享(这点要比多进程要好) 缺点就是,线程是对全局变量随意遂改可能造成多线程之间对全局变量的混乱(即线程非安全) …

R语言第一讲

一、R语言入门推荐 推荐四本材料书:R CookBook :hhtp://www.cookbook-r.com/R in Action http://www.amazon.com/R-Action-Robert-Kabaccoff/dp/1935182390Ggplot2:Elegant Graphics for Data Analysis(User R):hhtp://www.amazon.com/ggplo…

LeetCode 1567. 乘积为正数的最长子数组长度

文章目录1. 题目2. 解题1. 题目 给你一个整数数组 nums ,请你求出乘积为正数的最长子数组的长度。 一个数组的子数组是由原数组中零个或者更多个连续数字组成的数组。 请你返回乘积为正数的最长子数组长度。 示例 1: 输入:nums [1,-2,-…

python中的互斥锁

如果没有控制多个线程对同一资源的访问,对数据造成破坏,使得线程运行的结果不可预期。这种现象称为“线程不安全”。 线程同步解决问题: 系统调用t1,然后获取到num的值为0,此时上一把锁,即不允许其他现在操作num 对nu…

R语言第二讲

1、R语言包的概念 R提供了大量开箱即用的功能,但它最激动人心的一部分功能是通过可选模块的下载和安装 来实现的。目前有2500多个①称为包(package)的用户贡献模块可从 http://cran.r-project.org/ web/packages 下载。这些包提供了横跨各种…

LeetCode 1568. 使陆地分离的最少天数(DFS)

文章目录1. 题目2. 解题1. 题目 给你一个由若干 0 和 1 组成的二维网格 grid ,其中 0 表示水,而 1 表示陆地。 岛屿由水平方向或竖直方向上相邻的 1 (陆地)连接形成。 如果 恰好只有一座岛屿 ,则认为陆地是 连通的 &…

python中的非阻塞使用互斥锁

锁定方法acquire可以有一个blocking参数。 如果设定blocking为True,则当前线程会堵塞,直到获取到这个锁为止(如果没有指定,那么默认为True) 如果设定blocking为False,则当前线程不会堵塞 from threading im…

在XML文件中定义动画(1)

① 打开Eclipse&#xff0c;新建Android工程② 在res目录中新建anim文件夹③ 在anim目录中新建一个myanim.xml(注意文件名小写)④ 加入XML的动画代码 <?xml version"1.0" encoding"utf-8"?><set xmlns:android"http://schemas.android…

LeetCode 1569. 将子数组重新排序得到同一个二叉查找树的方案数(DP)

文章目录1. 题目2. 解题1. 题目 给你一个数组 nums 表示 1 到 n 的一个排列。 我们按照元素在 nums 中的顺序依次插入一个初始为空的二叉查找树&#xff08;BST&#xff09;。 请你统计将 nums 重新排序后&#xff0c;统计满足如下条件的方案数&#xff1a;重排后得到的二叉查…

ADS1.2开发环境创建与简要介绍

ADS1.2下建立工程 1.运行ADS1.2集成开发环境&#xff08;CodeWarrior for ARM Developer Suite&#xff09;&#xff0c;点击File|New,在New对话框中&#xff0c;选择Project栏&#xff0c;其中共有7项&#xff0c;ARM Executable Image是ARM的通用模板。选中它即可生成ARM的执…

多线程的全局变量与局部变量

在多线程开发中&#xff0c;全局变量是多个线程都共享的数据&#xff0c;而局部变量等是各自线程的&#xff0c;是非共享的。 from threading import Thread import time classMyThread(Thread): # 重写 构造方法 def __init__(self, num): # Thread.__init__(self) super(MyT…

const类型成员函数与mutable

const类型成员函数与mutable 原文&#xff1a;http://houhualiang.i.sohu.com/blog/view/42619368.htm const类型的成员函数是指使用const关键字进行修饰的类的成员函数。const类型的成员函数对函数内部的操作加以一定的限制&#xff0c;比如不可以对对象的属性进行修改等&…