Python:以时间为优先级的优先级队列

2024-09-25 02:37:57 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个使用heaps的优先级队列构建。队列包含消息,这些消息应该按照优先级的顺序发送。但是,作为优先级值,我有一段时间,在该时间之后应该发送消息,例如,必须将一组消息放入队列:

(10, message1)
(15, message2)
(5, message3)

所以按照优先级发送消息很容易。但是,如果我在将messag3放入队列后5秒后首先发送它,我希望确保下一条消息message1将在放入队列10秒后发送,这意味着在发送message3之后5秒。有人知道我怎么做到的吗?在


Tags: 消息队列顺序时间message1message3message2heaps
1条回答
网友
1楼 · 发布于 2024-09-25 02:37:57

您可以使用epoch作为优先级值,计时器每次触发时都会根据当前时间计算它何时应该再次触发。下面是一个实践中的简短示例:

import calendar
import time
import heapq
from threading import Timer

def epoch():
    return calendar.timegm(time.gmtime())

start_time = epoch()
heap = []
timer = None

def add_message(seconds, content):
    top = heap[0] if heap else None
    heapq.heappush(heap, (epoch() + seconds, content))
    if timer and top != heap[0]:
        timer.cancel()
        start()

def start():
    global timer
    if heap:
        timer = Timer(heap[0][0] - epoch(), fire)
        timer.start()

def fire():
    _, message = heapq.heappop(heap)
    print '{}: {}'.format(epoch() - start_time, message)
    start()

add_message(10, 'message1')
add_message(15, 'message2')
add_message(5, 'message3')
start()
add_message(1, 'message4')

输出:

^{pr2}$

相关问题 更多 >