summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLars Wirzenius <liw@liw.fi>2011-05-25 17:31:04 +0100
committerLars Wirzenius <liw@liw.fi>2011-05-25 17:31:04 +0100
commit30d18d13e7651250e877eaddae5bea04cb519667 (patch)
tree72c2c14e4ec81071e3b13bdf15b1e76b3256242c
parent9ac6d3e09a4b98ea8acc3a6e4d00aaa9ce3d2962 (diff)
downloadbgproc-30d18d13e7651250e877eaddae5bea04cb519667.tar.gz
Re-implement things using Queue module.
-rw-r--r--bgproc.py33
1 files 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 <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
+