概念原理

4.3 队列/管道

创建/方法

4.3 队列/管道

Queue([maxsize]) 
  创建共享的进程队列。
  maxsize是队列中允许的最大项数。如果省略此参数,则无大小限制。


Queue的实例q具有以下方法:
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异常。 q.empty()   如果调用此方法时 q为空,返回True。
  如果其他进程或线程正在往队列中添加项目,结果是不可靠的。也就是说,在返回和使用结果之间,队列中可能已经加入新的项目。
q.full()   如果q已满,返回为True. 由于线程的存在,结果也可能是不可靠的(参考q.empty()方法)。。

  进程间通讯示例

import time
from multiprocessing import Process, Queue

def f(q):
    q.put([time.asctime(), 'hi', 'hello'])  #调用主函数中p进程传递过来的进程参数 put函数为向队列中添加一条数据。

if __name__ == '__main__':
    q = Queue() #创建一个Queue对象
    p = Process(target=f, args=(q,)) #创建一个进程
    p.start()
    print(q.get())  # ['Wed Jan 30 23:54:47 2019', 'hi', 'hello']
    # 子进程拿到了父进程的数据
    p.join()
View Code

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-12-18
  • 2022-12-23
  • 2022-12-23
猜你喜欢
  • 2022-12-23
  • 2021-10-20
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-01-15
  • 2021-12-01
相关资源
相似解决方案