进程通信-Queue

进程通信-Queue

Queue消息队列是python进程通信的其中一种方式。需要引入multiprocessing包中的Queue函数(这是函数,不是类)。

有一个queue包,里面也有Queue,这个是和multiprocessing包有冲突的。

实际上multiprocessing包中的Queue就是用queue包的Queue来实现的。

 

Queue方法

put():往队列存放消息。可选参数,如果带参,例如:put(3),表示最多可存放3条消息。如果不带参数put(),则由可一直开辟内存空间存放消息。

get():从队列删除并拿出一条消息。一次只能拿一条,如果有多条,需要遍历循环取数。这是个阻塞函数,如果队列中没有消息,则会一直阻塞等待。

qsize():获取队列中消息的条数。

full():判断队列是否满了,若满了,则return True,否则为False

empty():判断队列是否为空(是否没有消息),若为空,则return True,否则为False

 

示例1,消息队列的数据存取

from multiprocessing import Queue

q=Queue(3)#最多只能存放3条数据

i=0
while True:
    if q.full():
        break
    q.put("hello%d" %i)
    i+=1

if not q.empty():
    for x in range(0, q.qsize()):
        print(q.get())

print("main end")

 

示例2,多进程间消息队列处理

from multiprocessing import Process,Queue
import time

def putInfo(q):
    i=0
    while True:
        if q.full():
            break
        q.put("hello%d" %i)
        i+=1
        
if __name__=="__main__":
    q = Queue(3)
    p1 = Process(target=putInfo, args=(q,))
    p1.start()
    p1.join()
    
    if not q.empty():
        for x in range(0, q.qsize()):
            print(q.get())

    print("main end")

 

posted @ 2019-01-24 10:46  雨行渡  阅读(373)  评论(0编辑  收藏  举报