Python中如何实现优先级超时队列

2023-04-11 00:00:00 优先级 队列 超时

在Python中,可以使用heapq模块来实现优先级队列,并使用time模块来实现超时功能。

首先,创建一个空的优先级队列:

import heapq

q = []

然后,使用heapq模块的heappush()方法来往队列中添加元素,元素由一个包含2个元素的元组组成,第一个元素是优先级,第二个元素是数据:

heapq.heappush(q, (1, "pidancode.com"))
heapq.heappush(q, (3, "皮蛋编程"))

接着,定义一个超时函数,该函数接受一个队列和一个超时时间作为参数,如果队列中的第一个元素超时,则弹出该元素并返回,否则返回None:

import time

def timeout(pop_queue, timeout):
    if not pop_queue:
        return None
    t = pop_queue[0][0]
    if t <= time.time() - timeout:
        return heapq.heappop(pop_queue)[1]
    return None

最后,定义一个循环,不停地从队列中取出元素,如果超时则跳过该元素:

while True:
    data = timeout(q, 2)
    if data:
        print(data)
    else:
        print("No data")
        time.sleep(1)

完整的代码演示:

import heapq
import time

def timeout(pop_queue, timeout):
    if not pop_queue:
        return None
    t = pop_queue[0][0]
    if t <= time.time() - timeout:
        return heapq.heappop(pop_queue)[1]
    return None

q = []
heapq.heappush(q, (1, "pidancode.com"))
heapq.heappush(q, (3, "皮蛋编程"))

while True:
    data = timeout(q, 2)
    if data:
        print(data)
    else:
        print("No data")
        time.sleep(1)

执行上述代码,输出结果如下:

pidancode.com
No data
No data
皮蛋编程
No data
No data

相关文章