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

日瓦

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

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

因此,按照优先级发送消息很容易。但是,如果我要先将messag35秒钟后的消息发送到队列中,我想确保下一条消息message1放入队列10秒钟后将message3被发送,发送5秒钟后将发送消息。有谁知道我能做到的任何例子吗?

沉默的

您可以将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')

输出:

1: message4
5: message3
10: message1
15: message2

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章