diff options
author | Lars Wirzenius <liw@liw.fi> | 2011-05-25 17:31:04 +0100 |
---|---|---|
committer | Lars Wirzenius <liw@liw.fi> | 2011-05-25 17:31:04 +0100 |
commit | 30d18d13e7651250e877eaddae5bea04cb519667 (patch) | |
tree | 72c2c14e4ec81071e3b13bdf15b1e76b3256242c | |
parent | 9ac6d3e09a4b98ea8acc3a6e4d00aaa9ce3d2962 (diff) | |
download | bgproc-30d18d13e7651250e877eaddae5bea04cb519667.tar.gz |
Re-implement things using Queue module.
-rw-r--r-- | bgproc.py | 33 |
1 files changed, 22 insertions, 11 deletions
@@ -14,6 +14,9 @@ # along with this program. If not, see <http://www.gnu.org/licenses/>. +import Queue + + class BackgroundProcessing(object): '''Manage background processing queues.''' @@ -21,13 +24,13 @@ class BackgroundProcessing(object): def __init__(self, func): self.func = func self.pending_requests = 0 - self.requests = [] - self.results = [] + self.requests = Queue.Queue() + self.results = Queue.Queue() def enqueue_request(self, request): '''Put a request into queue, to be processed by workers whenever.''' self.pending_requests += 1 - self.requests.append(request) + self.requests.put(request) def close_requests(self): '''Signal workers that they can retire. @@ -48,15 +51,23 @@ class BackgroundProcessing(object): ''' - while self.requests: - request = self.requests.pop(0) - self.pending_requests -= 1 - self.results.append(self.func(request)) - return len(self.results) > 0 + while True: + try: + request = self.requests.get(False) + self.results.put(self.func(request)) + except Queue.Empty: + break + else: + self.pending_requests -= 1 + + return not self.results.empty() def __iter__(self): '''Iterate over immediately available results.''' - while self.results: - result = self.results.pop(0) - yield result + while True: + try: + yield self.results.get(False) + except Queue.Empty: + break + |