Revision c258f110
b/lib/workerpool.py | ||
---|---|---|
26 | 26 |
import logging |
27 | 27 |
import threading |
28 | 28 |
import heapq |
29 |
import itertools |
|
29 | 30 |
|
30 | 31 |
from ganeti import compat |
31 | 32 |
from ganeti import errors |
... | ... | |
252 | 253 |
self._termworkers = [] |
253 | 254 |
|
254 | 255 |
# Queued tasks |
255 |
self._counter = 0
|
|
256 |
self._counter = itertools.count()
|
|
256 | 257 |
self._tasks = [] |
257 | 258 |
|
258 | 259 |
# Start workers |
... | ... | |
279 | 280 |
assert isinstance(args, (tuple, list)), "Arguments must be a sequence" |
280 | 281 |
assert isinstance(priority, (int, long)), "Priority must be numeric" |
281 | 282 |
|
282 |
# This counter is used to ensure elements are processed in their |
|
283 |
# incoming order. For processing they're sorted by priority and then |
|
284 |
# counter. |
|
285 |
self._counter += 1 |
|
286 |
|
|
287 |
heapq.heappush(self._tasks, (priority, self._counter, args)) |
|
283 |
# A counter is used to ensure elements are processed in their incoming |
|
284 |
# order. For processing they're sorted by priority and then counter. |
|
285 |
heapq.heappush(self._tasks, (priority, self._counter.next(), args)) |
|
288 | 286 |
|
289 | 287 |
# Notify a waiting worker |
290 | 288 |
self._pool_to_worker.notify() |
Also available in: Unified diff