当前位置:   article > 正文

queue.Queue和multiprocessing.Queue队列的区别_multiprocessing.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()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29

运行结果:


```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

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

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


写在结尾

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

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号