码迷,mamicode.com
首页 > 编程语言 > 详细

python 进程之间互相通信----->队列(推荐使用)

时间:2017-08-30 13:18:56      阅读:141      评论:0      收藏:0      [点我收藏+]

标签:div   取出   产生   等于   导致   blog   proc   color   通信   

1.进程之间相互通信有几种实现方式。

multiprocessing模块支持两种形式:队列和管道,这两种方式都是使用消息传递的,推荐使用队列,因为管道也需要处理锁的问题。

2队列的主要方法

# 1.q.put方法用以插入数据到队列中,
# put方法还有两个可选参数:blocked和timeout。如果blocked为True(默认值),并且timeout为正值,该方法会阻塞timeout指定的时间,直到该队列有剩余的空间。
# 如果超时,会抛出Queue.Full异常。如果blocked为False,但该Queue已满,会立即抛出Queue.Full异常。

#
2.q.get方法可以从队列读取并且删除一个元素。
# 同样,get方法有两个可选参数:blocked和timeout。如果blocked为True(默认值),并且timeout为正值,那么在等待时间内没有取到任何元素,会抛出Queue.Empty异常。
# 如果blocked为False,有两种情况存在,如果Queue有一个值可用,则立即返回该值,否则,如果队列为空,则立即抛出Queue.Empty异常.
# # 3.q.get_nowait():同q.get(False) # 4.q.put_nowait():同q.put(False) # # 5.q.empty():调用此方法时q为空则返回True,该结果不可靠,比如在返回True的过程中,如果队列中又加入了项目。 # 6.q.full():调用此方法时q已满则返回True,该结果不可靠,比如在返回True的过程中,如果队列中的项目被取走。 # 7.q.qsize():返回队列中目前项目的正确数量,结果也不可靠,理由同q.empty()和q.full()一样

 3.其他的方法(了解)

1 q.cancel_join_thread():不会在进程退出时自动连接后台线程。可以防止join_thread()方法阻塞
2 q.close():关闭队列,防止队列中加入更多数据。调用此方法,后台线程将继续写入那些已经入队列但尚未写入的数据,但将在此方法完成时马上关闭。如果q被垃圾收集,将调用此方法。关闭队列不会在队列使用者中产生任何类型的数据结束信号或异常。例如,如果某个使用者正在被阻塞在get()操作上,关闭生产者中的队列不会导致get()方法返回错误。
3 q.join_thread():连接队列的后台线程。此方法用于在调用q.close()方法之后,等待所有队列项被消耗。默认情况下,此方法由不是q的原始创建者的所有进程调用。调用q.cancel_join_thread方法可以禁止这种行为

 

.

4.代码实现:

from multiprocessing import Queue   #导入Queue方法实现队列
q=Queue(3) #创建队列的类 3是允许最大的数量。不填写等于无限制
q.put(first) #往队列中添加数据,可以添加任何类型的数据
q.put(second)
q.put(third)
# q.put(‘fourth‘)  因为最大只能添加三个消息。所以在存放第四个的时候会等待第一个消息取出后才会存放进去。
#
print(q.get()) #取值 先进先出原则,所以第一个去出的事first
print(q.get())
print(q.get())

代码效果:

技术分享

 

python 进程之间互相通信----->队列(推荐使用)

标签:div   取出   产生   等于   导致   blog   proc   color   通信   

原文地址:http://www.cnblogs.com/yxwang/p/7452351.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!