queue.Queue和multiprocessing.Queue队列的区别

queue.Queue和multiprocessing.Queue队列的区别


注意下面
如果有车载讨论需要的小伙伴,可以私信加我微信,拉你进群,和同行业大佬交流
注意上面

前言

关于这两个队列的区别我在网上搜到结果如下:
Python multiprocessing.Queue() 和 queue.Queue区别
1、queue.Queue是进程内非阻塞队列
2、multiprocessing.Queue是跨进程通信队列
3、多进程前者是各自私有,后者是各子进程共有
4、pickle对传入对象的要求是不能是内部类,也不能是lambda函数(仅针对multiprocessing.Queue()

但通过我自己的实践后发现第一条好像并不成立,以下部分是我经过实践后的结果


一、明显的区别

1.queue.Queue是进程内的用的队列,也就是多线程
2.multiprocessing.Queue是跨进程通信队列,也就是多进程
所以在我们可以明确他们这个区别(线程进程不懂的请自行百度)

二、queue.Queue是进程内非阻塞队列?

1.引入库

代码如下(示例):

import time
from queue import Queue
import mythread

class thread_test():
    def __init__(self):
        self.q = Queue(5)  #创建队列
        # self.print_thread() #开启现场

    def mprintnum(self):     #创建打印函数
        while True:
            value = self.q.get()    #因为这里是阻塞式的,所以程序会在这里阻塞,线程也就会挂起
            print("the is test")
            print(value)
            time.sleep(0.1)


    def print_thread(self):      #创建打印线程
        t1 = mythread.MyThread(target=self.mprintnum)
        t1.start()

    def mrange(self,):
        for num in range(15):
            if not self.q.full():
                self.q.put(num)     #这里的写入是阻塞式的,写入之前最好判断一下队列有没有满
                print("test")

me = thread_test()
me.mrange()

运行结果:


```python
C:\Users\Administrator\AppData\Local\Programs\Python\Python310\python.exe D:/pythonproject/Queuetest.py
test
test
test
test
test

Process finished with exit code 0

从上面的打印我们可以看出,这个当队列满了以后我们再往队列中写入数据,就会在写入这个位置阻塞住,从队列获取数据也是如此,当队列为空时,取数据会阻塞住。从现象看来queue.Queue并不是进程内的非阻塞队列,应该是进程内的阻塞队列吧?关于这点我不明白,别人为什么这么写,希望有知道的大佬能指点下,感谢!


写在结尾

我是一名车载集成测试开发工程师,希望能和志同道合的朋友一起相互学习进步

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值