from heapdict import heapdict
import time
import threading

class FrameQueue():

    def __init__(self):
        self.heap = heapdict()
        self.age_interval = 5    # seconds

    def push(self, frame, priority):
        timestamp = time.time()  # microsecond resolution
        self.heap[timestamp] = (priority, timestamp, frame)

    def pop(self):
        p, f = self.heap.popitem()
        self.age()
        return f[2]

    def age(self):
        current_time = time.time()
        for key in list(self.heap.keys()):
            if current_time - key > self.age_interval:
                self.heap[key][0] -= 1

    def is_empty(self): 
        return len(self.heap) == 0