Revision 25e557a5
b/lib/workerpool.py | ||
---|---|---|
27 | 27 |
import logging |
28 | 28 |
import threading |
29 | 29 |
|
30 |
from ganeti import compat |
|
31 |
|
|
30 | 32 |
|
31 | 33 |
class BaseWorker(threading.Thread, object): |
32 | 34 |
"""Base worker class for worker pools. |
... | ... | |
211 | 213 |
@param tasks: list of args passed to L{BaseWorker.RunTask} |
212 | 214 |
|
213 | 215 |
""" |
216 |
assert compat.all(isinstance(task, (tuple, list)) for task in tasks), \ |
|
217 |
"Each task must be a sequence" |
|
218 |
|
|
214 | 219 |
self._lock.acquire() |
215 | 220 |
try: |
216 | 221 |
self._WaitWhileQuiescingUnlocked() |
b/test/ganeti.workerpool_unittest.py | ||
---|---|---|
169 | 169 |
|
170 | 170 |
self.assertEquals(ctx.GetDoneTasks(), 22) |
171 | 171 |
|
172 |
def testManyTasksSequence(self): |
|
173 |
ctx = CountingContext() |
|
174 |
wp = workerpool.WorkerPool("Test", 3, CountingBaseWorker) |
|
175 |
try: |
|
176 |
self._CheckWorkerCount(wp, 3) |
|
177 |
self.assertRaises(AssertionError, wp.AddManyTasks, |
|
178 |
["Hello world %s" % i for i in range(10)]) |
|
179 |
self.assertRaises(AssertionError, wp.AddManyTasks, |
|
180 |
[i for i in range(10)]) |
|
181 |
|
|
182 |
wp.AddManyTasks([(ctx, "Hello world %s" % i, ) for i in range(10)]) |
|
183 |
wp.AddTask(ctx, "A separate hello") |
|
184 |
|
|
185 |
wp.Quiesce() |
|
186 |
|
|
187 |
self._CheckNoTasks(wp) |
|
188 |
finally: |
|
189 |
wp.TerminateWorkers() |
|
190 |
self._CheckWorkerCount(wp, 0) |
|
191 |
|
|
192 |
self.assertEquals(ctx.GetDoneTasks(), 11) |
|
193 |
|
|
172 | 194 |
def _CheckNoTasks(self, wp): |
173 | 195 |
wp._lock.acquire() |
174 | 196 |
try: |
Also available in: Unified diff