~certify-web-dev/twisted/certify-trunk

« back to all changes in this revision

Viewing changes to twisted/python/threadpool.py

  • Committer: Bazaar Package Importer
  • Author(s): Matthias Klose
  • Date: 2006-02-22 22:52:47 UTC
  • Revision ID: james.westby@ubuntu.com-20060222225247-0mjb8ij9473m5zse
Tags: 2.2.0-1ubuntu1
Synchronize with Debian unstable.

Show diffs side-by-side

added added

removed removed

Lines of Context:
14
14
import Queue
15
15
import threading
16
16
import threadable
17
 
import traceback
18
17
import copy
19
18
import sys
20
19
 
32
31
    """
33
32
    This class (hopefully) generalizes the functionality of a pool of
34
33
    threads to which work can be dispatched.
35
 
    
 
34
 
36
35
    dispatch(), dispatchWithCallback() and stop() should only be called from
37
 
    a single thread, unless you make a subclass where stop() and 
 
36
    a single thread, unless you make a subclass where stop() and
38
37
    _startSomeWorkers() are synchronized.
39
38
    """
40
39
    __inited = 0
44
43
    started = 0
45
44
    workers = 0
46
45
    name = None
47
 
    
 
46
 
48
47
    def __init__(self, minthreads=5, maxthreads=20, name=None):
49
48
        """Create a new threadpool.
50
49
 
99
98
        state['min'] = self.min
100
99
        state['max'] = self.max
101
100
        return state
102
 
    
 
101
 
103
102
    def _startSomeWorkers(self):
104
103
        while (
105
104
            self.workers < self.max and # Don't create too many
120
119
        self.q.put(o)
121
120
        if self.started:
122
121
            self._startSomeWorkers()
123
 
    
 
122
 
124
123
    def _runWithCallback(self, callback, errback, func, args, kwargs):
125
124
        try:
126
125
            result = apply(func, args, kwargs)
128
127
            errback(sys.exc_info()[1])
129
128
        else:
130
129
            callback(result)
131
 
    
 
130
 
132
131
    def dispatchWithCallback(self, owner, callback, errback, func, *args, **kw):
133
132
        """Dispatch a function, returning the result to a callback function.
134
 
        
 
133
 
135
134
        The callback function will be called in the thread - make sure it is
136
135
        thread-safe.
137
136
        """
156
155
            self.waiters.remove(ct)
157
156
 
158
157
        self.threads.remove(ct)
159
 
    
 
158
 
160
159
    def stop(self):
161
160
        """Shutdown the threads in the threadpool."""
162
161
        self.joined = 1
183
182
        self.max = maxthreads
184
183
        if not self.started:
185
184
            return
186
 
        
 
185
 
187
186
        # Kill of some threads if we have too many.
188
187
        while self.workers > self.max:
189
188
            self.stopAWorker()
192
191
            self.startAWorker()
193
192
        # Start some threads if there is a need.
194
193
        self._startSomeWorkers()
195
 
   
 
194
 
196
195
    def dumpStats(self):
197
196
        log.msg('queue: %s'   % self.q.queue)
198
197
        log.msg('waiters: %s' % self.waiters)