1
2
3
4
5
6
7
8
9
10
11 from twisted.internet.defer import Deferred, maybeDeferred
12 from twisted.internet import reactor
15 """
16 Executes up to N callables at a time. N is determined by the maxParrallel
17 used to construct an instance, unlimited by default.
18 """
20 self._max = maxParrallel
21 self._running = 0
22 self._taskQueue = []
23
27
30
31 @property
34
35 @property
37 return len(self._taskQueue)
38
39
40 - def submit(self, callable, *args, **kw):
51
53 if self._taskQueue and (self._max is None or self._running < self._max):
54 self._running += 1
55 task = self._taskQueue.pop(0)
56 task()
57 reactor.callLater(0, self._runTask)
58
63
66 """
67 Used by TwistedExecutor to execute queued tasks
68 """
69 - def __init__(self, deferred, callable, *args, **kw):
70 self._callable = callable
71 self._args = args
72 self._kw = kw
73 self._deferred = deferred
74
79
81 self._deferred.callback(result)
82
84 self._deferred.errback(result)
85