From 30d18d13e7651250e877eaddae5bea04cb519667 Mon Sep 17 00:00:00 2001 From: Lars Wirzenius Date: Wed, 25 May 2011 17:31:04 +0100 Subject: Re-implement things using Queue module. --- bgproc.py | 33 ++++++++++++++++++++++----------- 1 file changed, 22 insertions(+), 11 deletions(-) diff --git a/bgproc.py b/bgproc.py index 940f0ae..38443a8 100644 --- a/bgproc.py +++ b/bgproc.py @@ -14,6 +14,9 @@ # along with this program. If not, see . +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 + -- cgit v1.2.1