pythonqueue线程_Python3入门之线程queue

Queue.qsize()

返回队列的近似大小。注意,qsize() > 0并不能保证接下来的get()方法不被阻塞;同样,qsize() < maxsize也不能保证put()将不被阻塞。

importqueueimporttime

q=queue.Queue()

q.put(2)

q.put(1)

q.put(3)

q.put('python')print('queue long:%s'%q.qsize())

执行结果:

queue long:4

Queue.empty()

如果队列是空的,则返回True,否则False。如果empty()返回True,并不能保证接下来的put()调用将不被阻塞。类似的,empty()返回False也不能保证接下来的get()调用将不被阻塞。

importqueue

q=queue.Queue()

que=queue.Queue()

q.put(2)

q.put(1)

q.put(3)

q.put('python')print('q is empty? :%s'%q.empty())print('que is empty? :%s'%que.empty())

执行结果:

qis empty? :False #队列不为空则返回False

que is empty? :True #队列未空则返回True

Queue.full()

如果队列满则返回True,否则返回False。如果full()返回True,并不能保证接下来的get()调用将不被阻塞。类似的,full()返回False也不能保证接下来的put()调用将不被阻塞。

importqueue

q= queue.Queue(maxsize=4)

que=queue.Queue()

q.put(2)

q.put(1)

q.put(3)

q.put('python')print('q is full? :%s'%q.full())print('que is full? :%s'%que.full())

执行结果:

qisfull? :True

queis full? :False

Queue.put(item, block=True, timeout=None)

放item到队列中。如果block是True,且timeout是None,该方法将一直等待直到有队列有空余空间(默认block=True,timeout=None)。如果timeout是一个正整数,该方法则最多阻塞timeout秒并抛出Full异常。如果block是False并且队列满,则直接抛出Full异常(这时timeout将被忽略)。

block为True

importqueueimporttime

q= queue.Queue(maxsize=2)#将q队列填满

q.put('python')

q.put('linux')print(time.ctime()) #打印当前时间

try: #捕获queue.Full异常

#q.put('shell', timeout=3) #默认block=True

#q.put('shell', True, timeout=3) #可以省略block=;直接写True;timeout=可以省略直接写3

q.put('shell', block=True, timeout=3) #q队列已满,再次将数据放入q中,将阻塞3s后抛出异常queue.Full

exceptqueue.Full:print('queue is full!')print(time.ctime()) #打印当前时间,可看出q队列阻塞时长

执行结果:

Fri Nov3 15:06:43 2017queueisfull!

Fri Nov3 15:06:46 2017

block为False

importqueueimporttime

q= queue.Queue(maxsize=2)#将q队列填满

q.put('python')

q.put('linux')print(time.ctime()) #打印当前时间

try: #捕获queue.Full异常

q.put('shell', False, timeout=3) #block为False时,timeout失效会立即抛出queue.Full异常;故timeout选项可以省略不写

exceptqueue.Full:print('queue is full!')print(time.ctime()) #打印当前时间,可看出q队列阻塞时长

执行结果:

Fri Nov3 15:12:21 2017queueisfull!

Fri Nov3 15:12:21 2017

Queue.put_nowait(item)

等价于put(item, False)。

Queue.get(block=True, timeout=None)

从队列中移除被返回一个条目。如果block是True并且timeout是None(默认block=True,timeout=None),该方法将阻塞直到队列中有条目可用。如果timeout是正整数,该方法将最多阻塞timeout秒并抛出Empty异常。如果block是False并且队列为空,则直接抛出Empty异常(这时timeout将被忽略)。

block为True

importqueueimporttime

q= queue.Queue(maxsize=2)#当前q队列填为空

print(time.ctime()) #打印当前时间

try: #捕获queue.Empty异常

q.get(True, 5) #Queue.get()获取数据阻塞5s

exceptqueue.Empty:print('queue is empty!')print(time.ctime()) #打印当前时间,可看出q队列阻塞时长

执行结果:

Fri Nov3 15:34:46 2017queueisempty!

Fri Nov3 15:34:51 2017

block为False

importqueueimporttime

q= queue.Queue(maxsize=2)#当前q队列填为空

print(time.ctime()) #打印当前时间

try: #捕获queue.Empty异常

#q.get(False, 5) #Queue.get()获取数据阻塞5s,block=/timeout=可以省略;block=False时timeout可以省略

q.get(False)exceptqueue.Empty:print('queue is empty!')print(time.ctime()) #打印当前时间,可看出q队列阻塞时长

执行结果:

Fri Nov3 15:38:23 2017queueisempty!

Fri Nov3 15:38:23 2017

Queue.get_nowait()

等价于get(False)。

Queue.task_done()

表示一个先前的队列中的任务完成了。被队列消费者线程使用。对于每个get()获取到的任务,接下来的task_done()的调用告诉队列该任务的处理已经完成。

如果join()调用正在阻塞,当队列中所有的条目被处理后它将恢复执行(意味着task_done()调用将被放入队列中的每个条目接收到)。

如果调用次数超过了队列中放置的条目数目,将抛出ValueError异常。

Queue.join()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值