From c258f1103f13d5c2ec70aa10cb0dbba877d65fec Mon Sep 17 00:00:00 2001
From: Michael Hanselmann <hansmi@google.com>
Date: Fri, 26 Oct 2012 17:38:03 +0200
Subject: [PATCH] workerpool: Use itertools.count instead of manual counting
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Instead of having to explicitely increment the value (ββ¦ += 1β), a call
to next() is enough. These numbers should in no case be re-used (they
are used for ordering tasks). Using βitertools.countβ is useful here as
it guarantees that a returned number won't be returned another time.
Manual code for this could, over the course of time, gain unintended
bugs.
Signed-off-by: Michael Hanselmann <hansmi@google.com>
Reviewed-by: Bernardo Dal Seno <bdalseno@google.com>
---
lib/workerpool.py | 12 +++++-------
1 file changed, 5 insertions(+), 7 deletions(-)
diff --git a/lib/workerpool.py b/lib/workerpool.py
index fbf562d28..d9e2ae348 100644
--- a/lib/workerpool.py
+++ b/lib/workerpool.py
@@ -26,6 +26,7 @@
import logging
import threading
import heapq
+import itertools
from ganeti import compat
from ganeti import errors
@@ -252,7 +253,7 @@ class WorkerPool(object):
self._termworkers = []
# Queued tasks
- self._counter = 0
+ self._counter = itertools.count()
self._tasks = []
# Start workers
@@ -279,12 +280,9 @@ class WorkerPool(object):
assert isinstance(args, (tuple, list)), "Arguments must be a sequence"
assert isinstance(priority, (int, long)), "Priority must be numeric"
- # This counter is used to ensure elements are processed in their
- # incoming order. For processing they're sorted by priority and then
- # counter.
- self._counter += 1
-
- heapq.heappush(self._tasks, (priority, self._counter, args))
+ # A counter is used to ensure elements are processed in their incoming
+ # order. For processing they're sorted by priority and then counter.
+ heapq.heappush(self._tasks, (priority, self._counter.next(), args))
# Notify a waiting worker
self._pool_to_worker.notify()
--
GitLab