1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 __doc__='''NJobs
16
17 Run a list of jobs in parallel, limited to N at a time.
18
19 $Id$
20 '''
21
22 __version__ = "$Revision$"[11:-2]
23
24 from twisted.internet import defer
25
26
28 "Run a list of jobs in parallel, limited to N at a time."
29
30 - def __init__(self, max, callable, data):
31 self.defer = defer.Deferred()
32 self.results = []
33 self.max = max
34 self.callable = callable
35 self.workQueue = data
36 self.running = 0
37
41
43 return self.running, len(self.workQueue), len(self.results)
44
46 while self.running < self.max and self.workQueue:
47 self.running += 1
48 try:
49 d = self.callable(self.workQueue.pop())
50 except Exception, ex:
51 self._finished(ex)
52 else:
53 d.addBoth(self._finished)
54 if self.running == 0 and not self.workQueue and not self.defer.called:
55 self.defer.callback(self.results)
56
61