进程间的通信-队列Queue

 

  1.队列1

# 进程间通信(IPC(Inter-Process Communication))
    # 进程之间通信用的队列(Queue),不是之前说的普通队列(import queue)
        # 概念介绍
            # 创建共享的进程队列,Queue是多进程安全的队列,可以使用Queue实现多进程之间的数据传递
            # Queue([maxsize])
                # 创建共享的进程队列
                # 参数:maxsize是队列中允许的最大项数
                # 底层队列使用管道和锁定实现

    #q.get( [ block [, timeout]] )
        #返回q队列中的一个项目,如果q为空,此方法将阻塞,直到队列中有项目可用为止,block用于控制阻塞的行为
        # 默认为True,如果设置为False,将引发Queue.Empty异常(定义在Queue模块中)。timeout是可选超时时间
        # 用在阻塞模式中,如果在制定的时间间隔内没有项目变为可用,将引发Queue.Empty异常

    # q.get_nowait()
        # 同q.get(False)方法

    # q.put(item [, block[, timeout]])
        #将item放入队列,如果队列已满,此方法将阻塞至有空间可用为止,block用于控制阻塞的行为
        # 默认为True,如果设置为False,将引发Queue.Empty异常(定义在Queue模块中)
        # timeout指定在阻塞模式中等待可用空间的时间长短,超时后将引发Queue.Full异常

    # q.qsize()
        # 返回队列中目前项目的正确数量,次函数的结果并不可靠,因为在返回结果和在稍后程序中使用结果之间,队列中
        # 可能添加或删除了项目,在某些系统上,此方法可能引发NotImplementedError异常

# from multiprocessing import Queue
#
# q = Queue(5)   # 创建一个进程间通信用的队列,队列大小是5
# q.put(1)    # 向队列中放数据,当放入到队列的数据超过上限个时,会阻塞在这里,只有当队列中的数据被取走才会接触阻塞向队列里继续放数据
# q.put(1)    # 向队列中放数据
# q.put(1)    # 向队列中放数据
# q.put(1)    # 向队列中放数据
# q.put(1)    # 向队列中放数据
# print(q.full()) # 查看队列是否满了,True表示满了,False表示没有满
# #q.put(1)    # 向队列中放数据   当放入到队列的数据超过上限个时,会阻塞在这里,只有当队列中的数据被取走才会接触阻塞向队列里继续放数据
# print(q.get())  # 从队列中取数据,当队列中的数据被取干净之后,在调用get则会阻塞在这里,等待队列中有数据
# print(q.empty())    # 查询队列是否为空, False表示队列非空,True表示队列已经空了
# print(q.get())
# print(q.get())
# print(q.get())
# print(q.get())
# try:
#     print(q.get_nowait())   # 取值,没有值则不阻塞在这里,会抛出异常报错
# except:
#     print('队列已空')



from multiprocessing import Queue
from multiprocessing import Process

# 如果向队列中放数据,则处于的是生产队列的一方
def produce(q):
    '''
    生产数据的函数,向队列中存放数据
    :return:
    '''
    q.put('hello')

# 消耗数据的一方
def consume(q):
    '''
    消耗数据的一方,读取队列中的数据
    :param q:
    :return:
    '''
    print(q.get())

if __name__ == '__main__':
    q = Queue() # 创建队列时,没有参数,则表示队列无上限
    p = Process(target=produce, args=(q, ))
    p.start()

    c = Process(target=consume, args=(q, ))
    c.start()

 

转载于:https://www.cnblogs.com/whylinux/p/9819705.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值