赞
踩
注意下面
如果有车载讨论需要的小伙伴,可以私信加我微信
,拉你进群,和同行业大佬交流
注意上面
关于这两个队列的区别我在网上搜到结果如下:
Python multiprocessing.Queue() 和 queue.Queue区别
1、queue.Queue是进程内非阻塞队列
2、multiprocessing.Queue是跨进程通信队列
3、多进程前者是各自私有,后者是各子进程共有
4、pickle对传入对象的要求是不能是内部类,也不能是lambda函数(仅针对multiprocessing.Queue()
但通过我自己的实践后发现第一条好像并不成立,以下部分是我经过实践后的结果
1.queue.Queue是进程内的用的队列,也就是多线程
2.multiprocessing.Queue是跨进程通信队列,也就是多进程
所以在我们可以明确他们这个区别(线程进程不懂的请自行百度)
代码如下(示例):
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并不是进程内的非阻塞队列,应该是进程内的阻塞队列吧?关于这点我不明白,别人为什么这么写,希望有知道的大佬能指点下,感谢!
我是一名车载集成测试开发工程师,希望能和志同道合的朋友一起相互学习进步
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。