feat: prioritize handling commands

This commit is contained in:
lanvent
2023-04-04 14:29:03 +08:00
parent 709a1317ef
commit 6c7e4aaf37
2 changed files with 40 additions and 6 deletions

33
common/dequeue.py Normal file
View File

@@ -0,0 +1,33 @@
from queue import Full, Queue
from time import monotonic as time
# add implementation of putleft to Queue
class Dequeue(Queue):
def putleft(self, item, block=True, timeout=None):
with self.not_full:
if self.maxsize > 0:
if not block:
if self._qsize() >= self.maxsize:
raise Full
elif timeout is None:
while self._qsize() >= self.maxsize:
self.not_full.wait()
elif timeout < 0:
raise ValueError("'timeout' must be a non-negative number")
else:
endtime = time() + timeout
while self._qsize() >= self.maxsize:
remaining = endtime - time()
if remaining <= 0.0:
raise Full
self.not_full.wait(remaining)
self._putleft(item)
self.unfinished_tasks += 1
self.not_empty.notify()
def put_nowait(self, item):
return self.put(item, block=False)
def _putleft(self, item):
self.queue.appendleft(item)