并发编程 之 IPC机制

IPC机制:进程间通信,有两种实现方式:

一种:pipe:管道

二种:pipe(管道)+锁(队列)

实现通信兼进程   用队列

from multiprocessing import Queue   
#
Queue  队列

q=Queue(3) #queue占得是内存空间,队列 是 先进先出,括号里的3,代表队列大小为3个,只能放3个。

注意:
1,队列占用的是内存空间
2,不应该往列队中放大数据,应该只存放数据量较小的消息。

from multiprocessing import Queue
q=Queue(3)
q.put('first')
q.put({'k':'second'})
q.put(['third',])
# q.put(4) #放第四个的时候,需要等前面有人释放锁后才能放进去
print(q.get())
print(q.get())
print(q.get())
print(q.get()) #第四次的时候,会一直等待着有人释放,才能拿到,不然程序不结束。








#了解的
# q=Queue(3) #先进先出
# q.put('first',block=True,timeout=3)
# q.put({'k':'sencond'},block=True,timeout=3)
# q.put(['third',],block=True,timeout=3)
# print('===>')
# # q.put(4,block=True,timeout=3)
#
#
# print(q.get(block=True,timeout=3))
# print(q.get(block=True,timeout=3))
# print(q.get(block=True,timeout=3))
# print(q.get(block=True,timeout=3))

注意:当block=True 时,才有阻塞,才有 timeout=3,(超时间等待的概念)
当block=false时,说明无阻塞,加timeout(等待时间)无意义。当队列满了,直接抛出异常,不会阻塞
# q=Queue(3) #先进先出
# q.put('first',block=False,)
# q.put({'k':'sencond'},block=False,)
# q.put(['third',],block=False,)
# print('===>')
# # q.put(4,block=False,) # 队列满了直接抛出异常,不会阻塞
#
# print(q.get(block=False))
# print(q.get(block=False))
# print(q.get(block=False))
# print('get over')
# print(q.get(block=False))
#
posted @ 2018-07-12 19:11  空杯人  阅读(339)  评论(0编辑  收藏  举报