python 队列库_Python Queue(队列)

三、queue对象提供下面描述的公共方法:

Queue.qsize()

返回队列的大致大小(非准确值)。

Queue.empty()

如果队列为空则返回True,否则返回False(仅限当前,不保证后续情况)。

Queue.full()

如果队列已满则返回True,否则返回False(仅限当前,不保证后续情况)。

Queue.put(item [,block [,timeout ] ] )

将item放入队列。如果可选参数block为true 且 timeout为None,则在必要时阻止,直到有空闲槽可用。如果 timeout是一个正数,它会阻止最大超时时间,如果在该时间内没有可用的空闲槽,则会引发Full异常。

反之(block为false),如果有空闲槽可以立即使用,则将item放入队列,否则引发Full异常(在这种情况下忽略超时)。

Queue.put_nowait(item)

相当于 put(item, False)。

Queue.get([ block [,timeout ] ] )

从队列中删除并返回一个item。 如果可选的args块为true且timeout为None(默认值),则在必要时阻止,直到某个项可用为止。 如果timeout是一个正数,它会阻止最多超时秒,如果在该时间内没有可用的项,则会引发Empty异常。

反之(block为false),如果有item可以立即使用,则返回该tem,否则引发Empty异常(在这种情况下忽略超时)。

Queue.get_nowait()

相当于 get(False)。

四、queue对象还提供了两种方法来支持跟踪守护进程、消费者线程是否已完全处理入队任务:

Queue.task_done()表示之前队列的任务已完成。由队列消费者线程使用。对于用于获取任务的每个get(),对task_done()的后续调用会告知队列该任务的处理已完成。

如果join() 当前正阻塞,则它将在所有条目都已处理后恢复(这意味着已为每个已放入队列的条目收到task_done()调用)。

如果调用的次数超过队列中放置的条目,则引发ValueError。Queue.join()阻止直到队列中的所有条目都已获取并处理完毕。

每当条目添加到队列时,未完成任务的计数就会增加。每当消费者线程调用task_done()以指示该条目已被检索并且其上的所有工作都已完成时,计数就会下降。当未完成任务的数量降至零时,join()取消阻止。

如何等待队列任务完成的示例:

defworker():whileTrue:

item=q.get()

do_work(item)

q.task_done()

q=Queue()for i inrange(num_worker_threads):

t= Thread(target=worker)

t.daemon=True

t.start()for item insource():

q.put(item)

q.join()#block until all tasks are done

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值