Python 队列阻塞 get()时没反应

当队列为空时,执行get(),不会报异常

会进入阻塞状态,直到队列中有东西可取为止

from queue import Queue

taskQueue = Queue()
taskQueue.put('queue task 1')

print(f'队列长度:{taskQueue.qsize()}')
print(f'取值:{taskQueue.get()}')
print(f'队列长度:{taskQueue.qsize()}')
print(f'取值:{taskQueue.get()}')  # 在这里阻塞

print('END')



block=False 未取得值时,不进入阻塞状态,抛出异常

from queue import Queue

try:
    taskQueue = Queue()
    taskQueue.put('queue task 1')

    print(f'队列长度:{taskQueue.qsize()}')
    print(f'取值:{taskQueue.get()}')
    print(f'队列长度:{taskQueue.qsize()}')
    print(f'取值:{taskQueue.get(block=False)}')  # 在这里抛出异常
except:
    pass

print('END')



timeout 超时未取得值时,抛出异常

import time
from queue import Queue
from threading import Thread

taskQueue = Queue()


# 5秒往队列中put一次
def queue_put():
    for i in range(1, 101):
        print('queue put')
        taskQueue.put(f'queue task {i}')
        time.sleep(5)


# timeout 超时时间内,未取得值,会抛出异常
def queue_get():
    while 1:
        print(f'取值:{taskQueue.get(timeout=3)}')


t1 = Thread(target=queue_put)
t1.start()

t2 = Thread(target=queue_get)
t2.start()

posted @ 2022-03-08 02:15  三个零  阅读(662)  评论(0编辑  收藏  举报