1
2
3
4
5
6
7
8
9
10
11
12
13 from twisted.internet.defer import Deferred, maybeDeferred
14 from twisted.internet import reactor
17 """
18 Executes up to N callables at a time. N is determined by the maxParrallel
19 used to construct an instance, unlimited by default.
20 """
22 self._max = maxParrallel
23 self._running = 0
24 self._taskQueue = []
25
29
32
33 @property
36
37 @property
39 return len(self._taskQueue)
40
41
42 - def submit(self, callable, *args, **kw):
53
55 if self._taskQueue and (self._max is None or self._running < self._max):
56 self._running += 1
57 task = self._taskQueue.pop(0)
58 task()
59 reactor.callLater(0, self._runTask)
60
65
68 """
69 Used by TwistedExecutor to execute queued tasks
70 """
71 - def __init__(self, deferred, callable, *args, **kw):
72 self._callable = callable
73 self._args = args
74 self._kw = kw
75 self._deferred = deferred
76
81
83 self._deferred.callback(result)
84
86 self._deferred.errback(result)
87