博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
进程间的通信-队列Queue
阅读量:6832 次
发布时间:2019-06-26

本文共 2040 字,大约阅读时间需要 6 分钟。

 

  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 Queuefrom 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

你可能感兴趣的文章