我正在尝试实现一个计时器,用于在特定时间后调用打印队列的函数。如果在指定时间之前队列已满,我还可以取消计时器并打印排队。但是之后,我的timer对象突然行为,导致计时器重叠,例如,如果队列在2秒内被填满,那么它将打印排在2,8,2,8。。。时间间隔不是2,10
connection = pika.BlockingConnection(pika.ConnectionParameters(host='127.0.0.1'))
channel = connection.channel()
channel.queue_declare(queue='final', durable=True)
global msg_queue
global t
msg_queue=queue.Queue(maxsize=6)
def empty_queue():
print(time.time())
l=[]
i=int(msg_queue.qsize())
while i!=0:
l.append(msg_queue.get())
i-=1
t=threading.Timer(10,empty_queue)
print(l)
t.start()
t=threading.Timer(10,empty_queue)
print(time.time())
t.start()
while True:
if int(msg_queue.qsize())<6:
consume_generator = channel.consume(queue='final', no_ack=True)
result=next(consume_generator)
msg_queue.put(json.loads(result[2].decode("utf-8")))
else:
print("more",time.time())
t.cancel()
empty_queue()
我已经通过取消计时器来解决这个问题,以防止它自己的重复
您可以在计时器中嵌套一个if语句,说明if queue is full,然后禁用这个if语句,然后让计时器继续运行,直到它完成,而不会影响队列。我不认为它会导致与你的程序冲突,因为计时器可能是一个关闭。在
相关问题 更多 >
编程相关推荐