python 进程间通信_Python中多进程间的通信

进程间通信-Queue

•多进程之间,默认是不共享数据的

•通过Queue(队列Q)可以实现进程间的数据传递

•Q本身是一个消息队列

•如何添加消息(入队操作):

#如何添加消息(入队操作)

from multiprocessing import Queue

q=Queue(3)#初始化一个Queue对象,最多可接受3条消息

q.put("消息1")

q.put("消息2")

q.put("消息3")

print(q.full())

•可以使⽤multiprocessing模块的Queue实现多进程之间的数据传递

•初始化Queue()对象时(例如: q=Queue()),若括号中没有指定最⼤可接收的消息数量,或数量为负值,那么就代表可接受的消息数量没有上限

•Queue.qsize():返回当前队列包含的消息数量

•Queue.empty(): 如果队列为空,返回True, 反之False

•Queue.full(): 如果队列满了,返回True,反之False

•Queue.get([block[, timeout]]):获取队列中的⼀条消息, 然后将其从队列中移除, block默认值为True(此处block是阻塞的意思,True表示为阻塞状态)

–如果block使⽤默认值,且没有设置timeout(单位秒) , 消息队列如果为空, 此时程序将被阻塞(停在读取状态),直到从消息列队读到消息为⽌.

from multiprocessing import Process,Queue

def run(q):

print(q.get())

if __name__ == '__main__':

q = Queue()

p=Process(target=run,args=(q,))

p.start()

p.join()

如果设置了timeout, 则会等待timeout秒,若还没读取到任何消息, 出"Queue.Empty"异常

如果block值为False,消息队列如果为空, 则会⽴刻抛出“Queue.Empty”异常

from multiprocessing import Process,Queue

def run(q):

print(q.get(block=True,timeout=1))

if __name__ == '__main__':

q = Queue()

p=Process(target=run,args=(q,))

p.start()

p.join()

•Queue.get_nowait(): 相当于Queue.get(False) nowait 不等待 也就是相当于 不设置阻塞,block为False

•Queue.put(item,[block[, timeout]]): 将item消息写⼊队列, block默认值为True

–如果block使⽤默认值, 且没有设置timeout(单位秒) , 消息列队如果已 经没有空间可写⼊, 此时程序将被阻塞(停在写⼊状态),直到从消息列队腾出空间为⽌,如果设置了True和timeout, 则会等待timeout秒, 若还没空间, 则抛出"Queue.Full"异常

–如果block值为False,消息队列如果没有空间可写⼊, 则会⽴刻抛出"Queue.Full"异常

Queue.put_nowait(item): 相当Queue.put(item, False).

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值