Best way to implement a timed queue?
"Martin v. Löwis"
martin at v.loewis.de
Thu Jan 4 18:08:27 CET 2007
Thomas Ploch schrieb:
> I am having troubles with implementing a timed queue. I am using the
> 'Queue' module to manage several queues. But I want a timed access, i.e.
> only 2 fetches per second max. I am horribly stuck on even how I
> actually could write it. Has somebody done that before? And when yes,
> how is the best way to implement it?
You could put a wrapper around the queue which synchronizes the get
operations, and then delays access until 1s after the last-but-one
The following code is untested:
import threading, time
self.old = self.older = 0
self.get_lock = threading.Lock()
with self.get_lock: # synchronize get
# check whether the next get should be in the future
now = time.time()
next = self.older + 1
if now < next: time.sleep(next-now)
# really fetch one item; this may block
result = threading.Queue.get(self)
self.older = self.old
# set the last get time to the time when the get completed,
# not when it started
self.old = time.time()
More information about the Python-list