blob: 27a5511ddc290001d7e7c9d105df98ee68a388af [file] [log] [blame]
Jeremy Hylton92bb6e72002-08-14 19:25:42 +00001"""Thread module emulating a subset of Java's threading model."""
Guido van Rossum7f5013a1998-04-09 22:01:42 +00002
Fred Drakea8725952002-12-30 23:32:50 +00003import sys as _sys
4
5try:
6 import thread
7except ImportError:
8 del _sys.modules[__name__]
9 raise
10
Jeffrey Yasskin105f3d42008-03-31 00:35:53 +000011import warnings
Benjamin Petersonf4395602008-06-11 17:50:00 +000012
Brian Curtina9391052012-08-09 23:04:42 -050013from collections import deque as _deque
R David Murrayd999c342014-10-04 17:40:43 -040014from itertools import count as _count
Fred Drakea8725952002-12-30 23:32:50 +000015from time import time as _time, sleep as _sleep
Neil Schemenauerf607fc52003-11-05 23:03:00 +000016from traceback import format_exc as _format_exc
Guido van Rossum7f5013a1998-04-09 22:01:42 +000017
Benjamin Peterson973e6c22008-09-01 23:12:58 +000018# Note regarding PEP 8 compliant aliases
19# This threading model was originally inspired by Java, and inherited
20# the convention of camelCase function and method names from that
21# language. While those names are not in any imminent danger of being
22# deprecated, starting with Python 2.6, the module now provides a
23# PEP 8 compliant alias for any such method name.
24# Using the new PEP 8 compliant names also facilitates substitution
25# with the multiprocessing module, which doesn't provide the old
26# Java inspired names.
27
28
Guido van Rossum7f5013a1998-04-09 22:01:42 +000029# Rename some stuff so "from threading import *" is safe
Benjamin Peterson13f73822008-06-11 18:02:31 +000030__all__ = ['activeCount', 'active_count', 'Condition', 'currentThread',
31 'current_thread', 'enumerate', 'Event',
Tim Peters685e6972003-06-29 16:50:06 +000032 'Lock', 'RLock', 'Semaphore', 'BoundedSemaphore', 'Thread',
Andrew MacIntyre92913322006-06-13 15:04:24 +000033 'Timer', 'setprofile', 'settrace', 'local', 'stack_size']
Guido van Rossum7f5013a1998-04-09 22:01:42 +000034
Guido van Rossum7f5013a1998-04-09 22:01:42 +000035_start_new_thread = thread.start_new_thread
36_allocate_lock = thread.allocate_lock
37_get_ident = thread.get_ident
Jeremy Hyltonb5fc7492000-06-01 01:17:17 +000038ThreadError = thread.error
Guido van Rossum7f5013a1998-04-09 22:01:42 +000039del thread
40
Guido van Rossum7f5013a1998-04-09 22:01:42 +000041
Jeffrey Yasskin105f3d42008-03-31 00:35:53 +000042# sys.exc_clear is used to work around the fact that except blocks
43# don't fully clear the exception until 3.0.
44warnings.filterwarnings('ignore', category=DeprecationWarning,
45 module='threading', message='sys.exc_clear')
46
Tim Peters59aba122003-07-01 20:01:55 +000047# Debug support (adapted from ihooks.py).
48# All the major classes here derive from _Verbose. We force that to
49# be a new-style class so that all the major classes here are new-style.
50# This helps debugging (type(instance) is more revealing for instances
51# of new-style classes).
Guido van Rossum7f5013a1998-04-09 22:01:42 +000052
Tim Peters0939fac2003-07-01 19:28:44 +000053_VERBOSE = False
Guido van Rossum7f5013a1998-04-09 22:01:42 +000054
55if __debug__:
56
Tim Peters59aba122003-07-01 20:01:55 +000057 class _Verbose(object):
Guido van Rossum7f5013a1998-04-09 22:01:42 +000058
59 def __init__(self, verbose=None):
60 if verbose is None:
61 verbose = _VERBOSE
62 self.__verbose = verbose
63
64 def _note(self, format, *args):
65 if self.__verbose:
66 format = format % args
Antoine Pitrou47900cf2010-12-17 17:45:12 +000067 # Issue #4188: calling current_thread() can incur an infinite
68 # recursion if it has to create a DummyThread on the fly.
69 ident = _get_ident()
70 try:
71 name = _active[ident].name
72 except KeyError:
73 name = "<OS thread %d>" % ident
74 format = "%s: %s\n" % (name, format)
Guido van Rossum7f5013a1998-04-09 22:01:42 +000075 _sys.stderr.write(format)
76
77else:
78 # Disable this when using "python -O"
Tim Peters59aba122003-07-01 20:01:55 +000079 class _Verbose(object):
Guido van Rossum7f5013a1998-04-09 22:01:42 +000080 def __init__(self, verbose=None):
81 pass
82 def _note(self, *args):
83 pass
84
Jeremy Hyltonbfccb352003-06-29 16:58:41 +000085# Support for profile and trace hooks
86
87_profile_hook = None
88_trace_hook = None
89
90def setprofile(func):
Raymond Hettinger9f7e2472013-03-08 21:02:13 -070091 """Set a profile function for all threads started from the threading module.
92
93 The func will be passed to sys.setprofile() for each thread, before its
94 run() method is called.
95
96 """
Jeremy Hyltonbfccb352003-06-29 16:58:41 +000097 global _profile_hook
98 _profile_hook = func
Tim Petersd1b108b2003-06-29 17:24:17 +000099
Jeremy Hyltonbfccb352003-06-29 16:58:41 +0000100def settrace(func):
Raymond Hettinger9f7e2472013-03-08 21:02:13 -0700101 """Set a trace function for all threads started from the threading module.
102
103 The func will be passed to sys.settrace() for each thread, before its run()
104 method is called.
105
106 """
Jeremy Hyltonbfccb352003-06-29 16:58:41 +0000107 global _trace_hook
108 _trace_hook = func
Guido van Rossum7f5013a1998-04-09 22:01:42 +0000109
110# Synchronization classes
111
112Lock = _allocate_lock
113
114def RLock(*args, **kwargs):
Raymond Hettinger9f7e2472013-03-08 21:02:13 -0700115 """Factory function that returns a new reentrant lock.
116
117 A reentrant lock must be released by the thread that acquired it. Once a
118 thread has acquired a reentrant lock, the same thread may acquire it again
119 without blocking; the thread must release it once for each time it has
120 acquired it.
121
122 """
Guido van Rossum68468eb2003-02-27 20:14:51 +0000123 return _RLock(*args, **kwargs)
Guido van Rossum7f5013a1998-04-09 22:01:42 +0000124
125class _RLock(_Verbose):
Raymond Hettinger9f7e2472013-03-08 21:02:13 -0700126 """A reentrant lock must be released by the thread that acquired it. Once a
127 thread has acquired a reentrant lock, the same thread may acquire it
128 again without blocking; the thread must release it once for each time it
129 has acquired it.
130 """
Tim Petersb90f89a2001-01-15 03:26:36 +0000131
Guido van Rossum7f5013a1998-04-09 22:01:42 +0000132 def __init__(self, verbose=None):
133 _Verbose.__init__(self, verbose)
134 self.__block = _allocate_lock()
135 self.__owner = None
136 self.__count = 0
137
138 def __repr__(self):
Nick Coghlanf8bbaa92007-07-31 13:38:01 +0000139 owner = self.__owner
Antoine Pitroud7158d42009-11-09 16:00:11 +0000140 try:
141 owner = _active[owner].name
142 except KeyError:
143 pass
144 return "<%s owner=%r count=%d>" % (
145 self.__class__.__name__, owner, self.__count)
Guido van Rossum7f5013a1998-04-09 22:01:42 +0000146
147 def acquire(self, blocking=1):
Raymond Hettinger9f7e2472013-03-08 21:02:13 -0700148 """Acquire a lock, blocking or non-blocking.
149
150 When invoked without arguments: if this thread already owns the lock,
151 increment the recursion level by one, and return immediately. Otherwise,
152 if another thread owns the lock, block until the lock is unlocked. Once
153 the lock is unlocked (not owned by any thread), then grab ownership, set
154 the recursion level to one, and return. If more than one thread is
155 blocked waiting until the lock is unlocked, only one at a time will be
156 able to grab ownership of the lock. There is no return value in this
157 case.
158
159 When invoked with the blocking argument set to true, do the same thing
160 as when called without arguments, and return true.
161
162 When invoked with the blocking argument set to false, do not block. If a
163 call without an argument would block, return false immediately;
164 otherwise, do the same thing as when called without arguments, and
165 return true.
166
167 """
Antoine Pitroud7158d42009-11-09 16:00:11 +0000168 me = _get_ident()
169 if self.__owner == me:
Guido van Rossum7f5013a1998-04-09 22:01:42 +0000170 self.__count = self.__count + 1
171 if __debug__:
172 self._note("%s.acquire(%s): recursive success", self, blocking)
173 return 1
174 rc = self.__block.acquire(blocking)
175 if rc:
176 self.__owner = me
177 self.__count = 1
178 if __debug__:
Brett Cannon90cece72005-01-27 22:48:30 +0000179 self._note("%s.acquire(%s): initial success", self, blocking)
Guido van Rossum7f5013a1998-04-09 22:01:42 +0000180 else:
181 if __debug__:
182 self._note("%s.acquire(%s): failure", self, blocking)
183 return rc
184
Guido van Rossum1a5e21e2006-02-28 21:57:43 +0000185 __enter__ = acquire
186
Guido van Rossum7f5013a1998-04-09 22:01:42 +0000187 def release(self):
Raymond Hettinger9f7e2472013-03-08 21:02:13 -0700188 """Release a lock, decrementing the recursion level.
189
190 If after the decrement it is zero, reset the lock to unlocked (not owned
191 by any thread), and if any other threads are blocked waiting for the
192 lock to become unlocked, allow exactly one of them to proceed. If after
193 the decrement the recursion level is still nonzero, the lock remains
194 locked and owned by the calling thread.
195
196 Only call this method when the calling thread owns the lock. A
197 RuntimeError is raised if this method is called when the lock is
198 unlocked.
199
200 There is no return value.
201
202 """
Antoine Pitroud7158d42009-11-09 16:00:11 +0000203 if self.__owner != _get_ident():
Georg Brandle1254d72009-10-14 15:51:48 +0000204 raise RuntimeError("cannot release un-acquired lock")
Guido van Rossum7f5013a1998-04-09 22:01:42 +0000205 self.__count = count = self.__count - 1
206 if not count:
207 self.__owner = None
208 self.__block.release()
209 if __debug__:
210 self._note("%s.release(): final release", self)
211 else:
212 if __debug__:
213 self._note("%s.release(): non-final release", self)
214
Guido van Rossum1a5e21e2006-02-28 21:57:43 +0000215 def __exit__(self, t, v, tb):
216 self.release()
Guido van Rossum1a5e21e2006-02-28 21:57:43 +0000217
Guido van Rossum7f5013a1998-04-09 22:01:42 +0000218 # Internal methods used by condition variables
219
Brett Cannon20050502008-08-02 03:13:46 +0000220 def _acquire_restore(self, count_owner):
221 count, owner = count_owner
Guido van Rossum7f5013a1998-04-09 22:01:42 +0000222 self.__block.acquire()
223 self.__count = count
224 self.__owner = owner
225 if __debug__:
226 self._note("%s._acquire_restore()", self)
227
228 def _release_save(self):
229 if __debug__:
230 self._note("%s._release_save()", self)
231 count = self.__count
232 self.__count = 0
233 owner = self.__owner
234 self.__owner = None
235 self.__block.release()
236 return (count, owner)
237
238 def _is_owned(self):
Antoine Pitroud7158d42009-11-09 16:00:11 +0000239 return self.__owner == _get_ident()
Guido van Rossum7f5013a1998-04-09 22:01:42 +0000240
241
242def Condition(*args, **kwargs):
Raymond Hettinger9f7e2472013-03-08 21:02:13 -0700243 """Factory function that returns a new condition variable object.
244
245 A condition variable allows one or more threads to wait until they are
246 notified by another thread.
247
248 If the lock argument is given and not None, it must be a Lock or RLock
249 object, and it is used as the underlying lock. Otherwise, a new RLock object
250 is created and used as the underlying lock.
251
252 """
Guido van Rossum68468eb2003-02-27 20:14:51 +0000253 return _Condition(*args, **kwargs)
Guido van Rossum7f5013a1998-04-09 22:01:42 +0000254
255class _Condition(_Verbose):
Raymond Hettinger9f7e2472013-03-08 21:02:13 -0700256 """Condition variables allow one or more threads to wait until they are
257 notified by another thread.
258 """
Guido van Rossum7f5013a1998-04-09 22:01:42 +0000259
260 def __init__(self, lock=None, verbose=None):
261 _Verbose.__init__(self, verbose)
262 if lock is None:
263 lock = RLock()
264 self.__lock = lock
265 # Export the lock's acquire() and release() methods
266 self.acquire = lock.acquire
267 self.release = lock.release
268 # If the lock defines _release_save() and/or _acquire_restore(),
269 # these override the default implementations (which just call
270 # release() and acquire() on the lock). Ditto for _is_owned().
271 try:
272 self._release_save = lock._release_save
273 except AttributeError:
274 pass
275 try:
276 self._acquire_restore = lock._acquire_restore
277 except AttributeError:
278 pass
279 try:
280 self._is_owned = lock._is_owned
281 except AttributeError:
282 pass
283 self.__waiters = []
284
Guido van Rossumda5b7012006-05-02 19:47:52 +0000285 def __enter__(self):
286 return self.__lock.__enter__()
287
288 def __exit__(self, *args):
289 return self.__lock.__exit__(*args)
Guido van Rossum1a5e21e2006-02-28 21:57:43 +0000290
Guido van Rossum7f5013a1998-04-09 22:01:42 +0000291 def __repr__(self):
292 return "<Condition(%s, %d)>" % (self.__lock, len(self.__waiters))
293
294 def _release_save(self):
295 self.__lock.release() # No state to save
296
297 def _acquire_restore(self, x):
298 self.__lock.acquire() # Ignore saved state
299
300 def _is_owned(self):
Benjamin Peterson0fbcf692008-06-11 17:27:50 +0000301 # Return True if lock is owned by current_thread.
Jeremy Hyltonaf7fde72002-08-14 17:43:59 +0000302 # This method is called only if __lock doesn't have _is_owned().
Guido van Rossum7f5013a1998-04-09 22:01:42 +0000303 if self.__lock.acquire(0):
304 self.__lock.release()
Tim Petersbc0e9102002-04-04 22:55:58 +0000305 return False
Guido van Rossum7f5013a1998-04-09 22:01:42 +0000306 else:
Tim Petersbc0e9102002-04-04 22:55:58 +0000307 return True
Guido van Rossum7f5013a1998-04-09 22:01:42 +0000308
309 def wait(self, timeout=None):
Raymond Hettinger9f7e2472013-03-08 21:02:13 -0700310 """Wait until notified or until a timeout occurs.
311
312 If the calling thread has not acquired the lock when this method is
313 called, a RuntimeError is raised.
314
315 This method releases the underlying lock, and then blocks until it is
316 awakened by a notify() or notifyAll() call for the same condition
317 variable in another thread, or until the optional timeout occurs. Once
318 awakened or timed out, it re-acquires the lock and returns.
319
320 When the timeout argument is present and not None, it should be a
321 floating point number specifying a timeout for the operation in seconds
322 (or fractions thereof).
323
324 When the underlying lock is an RLock, it is not released using its
325 release() method, since this may not actually unlock the lock when it
326 was acquired multiple times recursively. Instead, an internal interface
327 of the RLock class is used, which really unlocks it even when it has
328 been recursively acquired several times. Another internal interface is
329 then used to restore the recursion level when the lock is reacquired.
330
331 """
Collin Winter50b79ce2007-06-06 00:17:35 +0000332 if not self._is_owned():
Georg Brandle1254d72009-10-14 15:51:48 +0000333 raise RuntimeError("cannot wait on un-acquired lock")
Guido van Rossum7f5013a1998-04-09 22:01:42 +0000334 waiter = _allocate_lock()
335 waiter.acquire()
336 self.__waiters.append(waiter)
337 saved_state = self._release_save()
Tim Petersc951bf92001-04-02 20:15:57 +0000338 try: # restore state no matter what (e.g., KeyboardInterrupt)
339 if timeout is None:
340 waiter.acquire()
Guido van Rossum7f5013a1998-04-09 22:01:42 +0000341 if __debug__:
Tim Petersc951bf92001-04-02 20:15:57 +0000342 self._note("%s.wait(): got it", self)
Guido van Rossum7f5013a1998-04-09 22:01:42 +0000343 else:
Tim Petersa6a4f272001-08-12 00:41:33 +0000344 # Balancing act: We can't afford a pure busy loop, so we
345 # have to sleep; but if we sleep the whole timeout time,
346 # we'll be unresponsive. The scheme here sleeps very
347 # little at first, longer as time goes on, but never longer
348 # than 20 times per second (or the timeout time remaining).
Tim Petersc951bf92001-04-02 20:15:57 +0000349 endtime = _time() + timeout
Tim Petersa6a4f272001-08-12 00:41:33 +0000350 delay = 0.0005 # 500 us -> initial delay of 1 ms
Guido van Rossum8ca162f2002-04-07 06:36:23 +0000351 while True:
Tim Petersc951bf92001-04-02 20:15:57 +0000352 gotit = waiter.acquire(0)
Tim Petersa6a4f272001-08-12 00:41:33 +0000353 if gotit:
Tim Petersc951bf92001-04-02 20:15:57 +0000354 break
Tim Petersa6a4f272001-08-12 00:41:33 +0000355 remaining = endtime - _time()
356 if remaining <= 0:
357 break
358 delay = min(delay * 2, remaining, .05)
Tim Petersc951bf92001-04-02 20:15:57 +0000359 _sleep(delay)
Tim Petersc951bf92001-04-02 20:15:57 +0000360 if not gotit:
361 if __debug__:
362 self._note("%s.wait(%s): timed out", self, timeout)
363 try:
364 self.__waiters.remove(waiter)
365 except ValueError:
366 pass
367 else:
368 if __debug__:
369 self._note("%s.wait(%s): got it", self, timeout)
370 finally:
371 self._acquire_restore(saved_state)
Guido van Rossum7f5013a1998-04-09 22:01:42 +0000372
373 def notify(self, n=1):
Raymond Hettinger9f7e2472013-03-08 21:02:13 -0700374 """Wake up one or more threads waiting on this condition, if any.
375
376 If the calling thread has not acquired the lock when this method is
377 called, a RuntimeError is raised.
378
379 This method wakes up at most n of the threads waiting for the condition
380 variable; it is a no-op if no threads are waiting.
381
382 """
Collin Winter50b79ce2007-06-06 00:17:35 +0000383 if not self._is_owned():
Georg Brandle1254d72009-10-14 15:51:48 +0000384 raise RuntimeError("cannot notify on un-acquired lock")
Guido van Rossum7f5013a1998-04-09 22:01:42 +0000385 __waiters = self.__waiters
386 waiters = __waiters[:n]
387 if not waiters:
388 if __debug__:
389 self._note("%s.notify(): no waiters", self)
390 return
391 self._note("%s.notify(): notifying %d waiter%s", self, n,
392 n!=1 and "s" or "")
393 for waiter in waiters:
394 waiter.release()
395 try:
396 __waiters.remove(waiter)
397 except ValueError:
398 pass
399
Benjamin Peterson973e6c22008-09-01 23:12:58 +0000400 def notifyAll(self):
Raymond Hettinger9f7e2472013-03-08 21:02:13 -0700401 """Wake up all threads waiting on this condition.
402
403 If the calling thread has not acquired the lock when this method
404 is called, a RuntimeError is raised.
405
406 """
Guido van Rossum7f5013a1998-04-09 22:01:42 +0000407 self.notify(len(self.__waiters))
408
Benjamin Peterson973e6c22008-09-01 23:12:58 +0000409 notify_all = notifyAll
Benjamin Petersonf4395602008-06-11 17:50:00 +0000410
Guido van Rossum7f5013a1998-04-09 22:01:42 +0000411
412def Semaphore(*args, **kwargs):
Raymond Hettinger9f7e2472013-03-08 21:02:13 -0700413 """A factory function that returns a new semaphore.
414
415 Semaphores manage a counter representing the number of release() calls minus
416 the number of acquire() calls, plus an initial value. The acquire() method
417 blocks if necessary until it can return without making the counter
418 negative. If not given, value defaults to 1.
419
420 """
Guido van Rossum68468eb2003-02-27 20:14:51 +0000421 return _Semaphore(*args, **kwargs)
Guido van Rossum7f5013a1998-04-09 22:01:42 +0000422
423class _Semaphore(_Verbose):
Raymond Hettinger9f7e2472013-03-08 21:02:13 -0700424 """Semaphores manage a counter representing the number of release() calls
425 minus the number of acquire() calls, plus an initial value. The acquire()
426 method blocks if necessary until it can return without making the counter
427 negative. If not given, value defaults to 1.
428
429 """
Guido van Rossum7f5013a1998-04-09 22:01:42 +0000430
Andrew M. Kuchling39d3bfc2000-02-29 00:10:24 +0000431 # After Tim Peters' semaphore class, but not quite the same (no maximum)
Guido van Rossum7f5013a1998-04-09 22:01:42 +0000432
433 def __init__(self, value=1, verbose=None):
Collin Winter50b79ce2007-06-06 00:17:35 +0000434 if value < 0:
435 raise ValueError("semaphore initial value must be >= 0")
Guido van Rossum7f5013a1998-04-09 22:01:42 +0000436 _Verbose.__init__(self, verbose)
437 self.__cond = Condition(Lock())
438 self.__value = value
439
440 def acquire(self, blocking=1):
Raymond Hettinger9f7e2472013-03-08 21:02:13 -0700441 """Acquire a semaphore, decrementing the internal counter by one.
442
443 When invoked without arguments: if the internal counter is larger than
444 zero on entry, decrement it by one and return immediately. If it is zero
445 on entry, block, waiting until some other thread has called release() to
446 make it larger than zero. This is done with proper interlocking so that
447 if multiple acquire() calls are blocked, release() will wake exactly one
448 of them up. The implementation may pick one at random, so the order in
449 which blocked threads are awakened should not be relied on. There is no
450 return value in this case.
451
452 When invoked with blocking set to true, do the same thing as when called
453 without arguments, and return true.
454
455 When invoked with blocking set to false, do not block. If a call without
456 an argument would block, return false immediately; otherwise, do the
457 same thing as when called without arguments, and return true.
458
459 """
Guido van Rossum8ca162f2002-04-07 06:36:23 +0000460 rc = False
Serhiy Storchakad194b302013-04-22 22:51:00 +0300461 with self.__cond:
462 while self.__value == 0:
463 if not blocking:
464 break
465 if __debug__:
466 self._note("%s.acquire(%s): blocked waiting, value=%s",
467 self, blocking, self.__value)
468 self.__cond.wait()
469 else:
470 self.__value = self.__value - 1
471 if __debug__:
472 self._note("%s.acquire: success, value=%s",
473 self, self.__value)
474 rc = True
Guido van Rossum7f5013a1998-04-09 22:01:42 +0000475 return rc
476
Guido van Rossum1a5e21e2006-02-28 21:57:43 +0000477 __enter__ = acquire
478
Guido van Rossum7f5013a1998-04-09 22:01:42 +0000479 def release(self):
Raymond Hettinger9f7e2472013-03-08 21:02:13 -0700480 """Release a semaphore, incrementing the internal counter by one.
481
482 When the counter is zero on entry and another thread is waiting for it
483 to become larger than zero again, wake up that thread.
484
485 """
Serhiy Storchakad194b302013-04-22 22:51:00 +0300486 with self.__cond:
487 self.__value = self.__value + 1
488 if __debug__:
489 self._note("%s.release: success, value=%s",
490 self, self.__value)
491 self.__cond.notify()
Guido van Rossum7f5013a1998-04-09 22:01:42 +0000492
Guido van Rossum1a5e21e2006-02-28 21:57:43 +0000493 def __exit__(self, t, v, tb):
494 self.release()
Guido van Rossum1a5e21e2006-02-28 21:57:43 +0000495
Guido van Rossum7f5013a1998-04-09 22:01:42 +0000496
Skip Montanaroe428bb72001-08-20 20:27:58 +0000497def BoundedSemaphore(*args, **kwargs):
Raymond Hettinger9f7e2472013-03-08 21:02:13 -0700498 """A factory function that returns a new bounded semaphore.
499
500 A bounded semaphore checks to make sure its current value doesn't exceed its
501 initial value. If it does, ValueError is raised. In most situations
502 semaphores are used to guard resources with limited capacity.
503
504 If the semaphore is released too many times it's a sign of a bug. If not
505 given, value defaults to 1.
506
507 Like regular semaphores, bounded semaphores manage a counter representing
508 the number of release() calls minus the number of acquire() calls, plus an
509 initial value. The acquire() method blocks if necessary until it can return
510 without making the counter negative. If not given, value defaults to 1.
511
512 """
Guido van Rossum68468eb2003-02-27 20:14:51 +0000513 return _BoundedSemaphore(*args, **kwargs)
Skip Montanaroe428bb72001-08-20 20:27:58 +0000514
515class _BoundedSemaphore(_Semaphore):
Raymond Hettinger9f7e2472013-03-08 21:02:13 -0700516 """A bounded semaphore checks to make sure its current value doesn't exceed
517 its initial value. If it does, ValueError is raised. In most situations
518 semaphores are used to guard resources with limited capacity.
519 """
520
Skip Montanaroe428bb72001-08-20 20:27:58 +0000521 def __init__(self, value=1, verbose=None):
522 _Semaphore.__init__(self, value, verbose)
523 self._initial_value = value
524
525 def release(self):
Raymond Hettinger9f7e2472013-03-08 21:02:13 -0700526 """Release a semaphore, incrementing the internal counter by one.
527
528 When the counter is zero on entry and another thread is waiting for it
529 to become larger than zero again, wake up that thread.
530
531 If the number of releases exceeds the number of acquires,
532 raise a ValueError.
533
534 """
Tim Petersb563d4b2013-10-08 21:51:06 -0500535 with self._Semaphore__cond:
536 if self._Semaphore__value >= self._initial_value:
Tim Peters641d6212013-10-08 20:55:51 -0500537 raise ValueError("Semaphore released too many times")
Tim Petersb563d4b2013-10-08 21:51:06 -0500538 self._Semaphore__value += 1
539 self._Semaphore__cond.notify()
Skip Montanaroe428bb72001-08-20 20:27:58 +0000540
541
Guido van Rossum7f5013a1998-04-09 22:01:42 +0000542def Event(*args, **kwargs):
Raymond Hettinger9f7e2472013-03-08 21:02:13 -0700543 """A factory function that returns a new event.
544
545 Events manage a flag that can be set to true with the set() method and reset
546 to false with the clear() method. The wait() method blocks until the flag is
547 true.
548
549 """
Guido van Rossum68468eb2003-02-27 20:14:51 +0000550 return _Event(*args, **kwargs)
Guido van Rossum7f5013a1998-04-09 22:01:42 +0000551
552class _Event(_Verbose):
Raymond Hettinger9f7e2472013-03-08 21:02:13 -0700553 """A factory function that returns a new event object. An event manages a
554 flag that can be set to true with the set() method and reset to false
555 with the clear() method. The wait() method blocks until the flag is true.
556
557 """
Guido van Rossum7f5013a1998-04-09 22:01:42 +0000558
559 # After Tim Peters' event class (without is_posted())
560
561 def __init__(self, verbose=None):
562 _Verbose.__init__(self, verbose)
563 self.__cond = Condition(Lock())
Guido van Rossum8ca162f2002-04-07 06:36:23 +0000564 self.__flag = False
Guido van Rossum7f5013a1998-04-09 22:01:42 +0000565
Gregory P. Smith2b79a812011-01-04 01:10:08 +0000566 def _reset_internal_locks(self):
567 # private! called by Thread._reset_internal_locks by _after_fork()
568 self.__cond.__init__()
569
Benjamin Peterson973e6c22008-09-01 23:12:58 +0000570 def isSet(self):
Raymond Hettinger9f7e2472013-03-08 21:02:13 -0700571 'Return true if and only if the internal flag is true.'
Guido van Rossum7f5013a1998-04-09 22:01:42 +0000572 return self.__flag
573
Benjamin Peterson973e6c22008-09-01 23:12:58 +0000574 is_set = isSet
Benjamin Petersonf4395602008-06-11 17:50:00 +0000575
Guido van Rossum7f5013a1998-04-09 22:01:42 +0000576 def set(self):
Raymond Hettinger9f7e2472013-03-08 21:02:13 -0700577 """Set the internal flag to true.
578
579 All threads waiting for the flag to become true are awakened. Threads
580 that call wait() once the flag is true will not block at all.
581
582 """
Raymond Hettinger70ec29d2008-01-24 18:12:23 +0000583 self.__cond.acquire()
584 try:
Guido van Rossum21b60142002-11-21 21:08:39 +0000585 self.__flag = True
Benjamin Peterson0fbcf692008-06-11 17:27:50 +0000586 self.__cond.notify_all()
Raymond Hettinger70ec29d2008-01-24 18:12:23 +0000587 finally:
588 self.__cond.release()
Guido van Rossum7f5013a1998-04-09 22:01:42 +0000589
590 def clear(self):
Raymond Hettinger9f7e2472013-03-08 21:02:13 -0700591 """Reset the internal flag to false.
592
593 Subsequently, threads calling wait() will block until set() is called to
594 set the internal flag to true again.
595
596 """
Raymond Hettinger70ec29d2008-01-24 18:12:23 +0000597 self.__cond.acquire()
598 try:
Guido van Rossum21b60142002-11-21 21:08:39 +0000599 self.__flag = False
Raymond Hettinger70ec29d2008-01-24 18:12:23 +0000600 finally:
601 self.__cond.release()
Guido van Rossum7f5013a1998-04-09 22:01:42 +0000602
603 def wait(self, timeout=None):
Raymond Hettinger9f7e2472013-03-08 21:02:13 -0700604 """Block until the internal flag is true.
605
606 If the internal flag is true on entry, return immediately. Otherwise,
607 block until another thread calls set() to set the flag to true, or until
608 the optional timeout occurs.
609
610 When the timeout argument is present and not None, it should be a
611 floating point number specifying a timeout for the operation in seconds
612 (or fractions thereof).
613
614 This method returns the internal flag on exit, so it will always return
615 True except if a timeout is given and the operation times out.
616
617 """
Raymond Hettinger70ec29d2008-01-24 18:12:23 +0000618 self.__cond.acquire()
619 try:
Guido van Rossum21b60142002-11-21 21:08:39 +0000620 if not self.__flag:
621 self.__cond.wait(timeout)
Georg Brandlef660e82009-03-31 20:41:08 +0000622 return self.__flag
Raymond Hettinger70ec29d2008-01-24 18:12:23 +0000623 finally:
624 self.__cond.release()
Guido van Rossum7f5013a1998-04-09 22:01:42 +0000625
Guido van Rossum7f5013a1998-04-09 22:01:42 +0000626# Helper to generate new thread names
R David Murrayd999c342014-10-04 17:40:43 -0400627_counter = _count().next
628_counter() # Consume 0 so first non-main thread has id 1.
Guido van Rossum7f5013a1998-04-09 22:01:42 +0000629def _newname(template="Thread-%d"):
R David Murrayd999c342014-10-04 17:40:43 -0400630 return template % _counter()
Guido van Rossum7f5013a1998-04-09 22:01:42 +0000631
632# Active thread administration
633_active_limbo_lock = _allocate_lock()
Tim Peters711906e2005-01-08 07:30:42 +0000634_active = {} # maps thread id to Thread object
Guido van Rossum7f5013a1998-04-09 22:01:42 +0000635_limbo = {}
636
637
638# Main class for threads
639
640class Thread(_Verbose):
Raymond Hettinger9f7e2472013-03-08 21:02:13 -0700641 """A class that represents a thread of control.
Guido van Rossum7f5013a1998-04-09 22:01:42 +0000642
Raymond Hettinger9f7e2472013-03-08 21:02:13 -0700643 This class can be safely subclassed in a limited fashion.
644
645 """
Guido van Rossum8ca162f2002-04-07 06:36:23 +0000646 __initialized = False
Brett Cannoncc4e9352004-07-03 03:52:35 +0000647 # Need to store a reference to sys.exc_info for printing
648 # out exceptions when a thread tries to use a global var. during interp.
649 # shutdown and thus raises an exception about trying to perform some
650 # operation on/with a NoneType
651 __exc_info = _sys.exc_info
Jeffrey Yasskin8b9091f2008-03-28 04:11:18 +0000652 # Keep sys.exc_clear too to clear the exception just before
653 # allowing .join() to return.
654 __exc_clear = _sys.exc_clear
Guido van Rossum7f5013a1998-04-09 22:01:42 +0000655
656 def __init__(self, group=None, target=None, name=None,
Georg Brandla4a8b822005-07-15 09:13:21 +0000657 args=(), kwargs=None, verbose=None):
Raymond Hettinger9f7e2472013-03-08 21:02:13 -0700658 """This constructor should always be called with keyword arguments. Arguments are:
659
660 *group* should be None; reserved for future extension when a ThreadGroup
661 class is implemented.
662
663 *target* is the callable object to be invoked by the run()
664 method. Defaults to None, meaning nothing is called.
665
666 *name* is the thread name. By default, a unique name is constructed of
667 the form "Thread-N" where N is a small decimal number.
668
669 *args* is the argument tuple for the target invocation. Defaults to ().
670
671 *kwargs* is a dictionary of keyword arguments for the target
672 invocation. Defaults to {}.
673
674 If a subclass overrides the constructor, it must make sure to invoke
675 the base class constructor (Thread.__init__()) before doing anything
676 else to the thread.
677
678"""
Guido van Rossum5a43e1a1998-06-09 19:04:26 +0000679 assert group is None, "group argument must be None for now"
Guido van Rossum7f5013a1998-04-09 22:01:42 +0000680 _Verbose.__init__(self, verbose)
Georg Brandla4a8b822005-07-15 09:13:21 +0000681 if kwargs is None:
682 kwargs = {}
Guido van Rossum7f5013a1998-04-09 22:01:42 +0000683 self.__target = target
684 self.__name = str(name or _newname())
685 self.__args = args
686 self.__kwargs = kwargs
687 self.__daemonic = self._set_daemon()
Gregory P. Smith8856dda2008-06-01 23:48:47 +0000688 self.__ident = None
Jeffrey Yasskin69e13092008-02-28 06:09:19 +0000689 self.__started = Event()
Guido van Rossum8ca162f2002-04-07 06:36:23 +0000690 self.__stopped = False
Guido van Rossum7f5013a1998-04-09 22:01:42 +0000691 self.__block = Condition(Lock())
Guido van Rossum8ca162f2002-04-07 06:36:23 +0000692 self.__initialized = True
Brett Cannoncc4e9352004-07-03 03:52:35 +0000693 # sys.stderr is not stored in the class like
694 # sys.exc_info since it can be changed between instances
695 self.__stderr = _sys.stderr
Guido van Rossum7f5013a1998-04-09 22:01:42 +0000696
Gregory P. Smith2b79a812011-01-04 01:10:08 +0000697 def _reset_internal_locks(self):
698 # private! Called by _after_fork() to reset our internal locks as
699 # they may be in an invalid state leading to a deadlock or crash.
Gregory P. Smithc8762022011-01-04 18:43:54 +0000700 if hasattr(self, '_Thread__block'): # DummyThread deletes self.__block
701 self.__block.__init__()
Gregory P. Smith2b79a812011-01-04 01:10:08 +0000702 self.__started._reset_internal_locks()
703
704 @property
705 def _block(self):
706 # used by a unittest
707 return self.__block
708
Guido van Rossum7f5013a1998-04-09 22:01:42 +0000709 def _set_daemon(self):
710 # Overridden in _MainThread and _DummyThread
Benjamin Petersoncbae8692008-08-18 17:45:09 +0000711 return current_thread().daemon
Guido van Rossum7f5013a1998-04-09 22:01:42 +0000712
713 def __repr__(self):
714 assert self.__initialized, "Thread.__init__() was not called"
715 status = "initial"
Benjamin Peterson0fbcf692008-06-11 17:27:50 +0000716 if self.__started.is_set():
Guido van Rossum7f5013a1998-04-09 22:01:42 +0000717 status = "started"
718 if self.__stopped:
719 status = "stopped"
720 if self.__daemonic:
Gregory P. Smith8856dda2008-06-01 23:48:47 +0000721 status += " daemon"
722 if self.__ident is not None:
723 status += " %s" % self.__ident
Guido van Rossum7f5013a1998-04-09 22:01:42 +0000724 return "<%s(%s, %s)>" % (self.__class__.__name__, self.__name, status)
725
726 def start(self):
Raymond Hettinger9f7e2472013-03-08 21:02:13 -0700727 """Start the thread's activity.
728
729 It must be called at most once per thread object. It arranges for the
730 object's run() method to be invoked in a separate thread of control.
731
732 This method will raise a RuntimeError if called more than once on the
733 same thread object.
734
735 """
Collin Winter50b79ce2007-06-06 00:17:35 +0000736 if not self.__initialized:
737 raise RuntimeError("thread.__init__() not called")
Benjamin Peterson0fbcf692008-06-11 17:27:50 +0000738 if self.__started.is_set():
Senthil Kumaranb02b3112010-04-06 03:23:33 +0000739 raise RuntimeError("threads can only be started once")
Guido van Rossum7f5013a1998-04-09 22:01:42 +0000740 if __debug__:
741 self._note("%s.start(): starting thread", self)
Benjamin Petersonbd9dd312009-03-31 21:06:30 +0000742 with _active_limbo_lock:
743 _limbo[self] = self
Gregory P. Smith613c7a52010-02-28 18:36:09 +0000744 try:
745 _start_new_thread(self.__bootstrap, ())
746 except Exception:
747 with _active_limbo_lock:
748 del _limbo[self]
749 raise
Jeffrey Yasskin69e13092008-02-28 06:09:19 +0000750 self.__started.wait()
Guido van Rossum7f5013a1998-04-09 22:01:42 +0000751
752 def run(self):
Raymond Hettinger9f7e2472013-03-08 21:02:13 -0700753 """Method representing the thread's activity.
754
755 You may override this method in a subclass. The standard run() method
756 invokes the callable object passed to the object's constructor as the
757 target argument, if any, with sequential and keyword arguments taken
758 from the args and kwargs arguments, respectively.
759
760 """
Jeffrey Yasskina885c152008-02-23 20:40:35 +0000761 try:
762 if self.__target:
763 self.__target(*self.__args, **self.__kwargs)
764 finally:
765 # Avoid a refcycle if the thread is running a function with
766 # an argument that has a member that points to the thread.
767 del self.__target, self.__args, self.__kwargs
Guido van Rossum7f5013a1998-04-09 22:01:42 +0000768
769 def __bootstrap(self):
Guido van Rossum54ec61e2007-08-20 15:18:04 +0000770 # Wrapper around the real bootstrap code that ignores
771 # exceptions during interpreter cleanup. Those typically
772 # happen when a daemon thread wakes up at an unfortunate
773 # moment, finds the world around it destroyed, and raises some
774 # random exception *** while trying to report the exception in
775 # __bootstrap_inner() below ***. Those random exceptions
776 # don't help anybody, and they confuse users, so we suppress
777 # them. We suppress them only when it appears that the world
778 # indeed has already been destroyed, so that exceptions in
779 # __bootstrap_inner() during normal business hours are properly
780 # reported. Also, we only suppress them for daemonic threads;
781 # if a non-daemonic encounters this, something else is wrong.
782 try:
783 self.__bootstrap_inner()
784 except:
785 if self.__daemonic and _sys is None:
786 return
787 raise
788
Benjamin Petersond906ea62009-03-31 21:34:42 +0000789 def _set_ident(self):
790 self.__ident = _get_ident()
791
Guido van Rossum54ec61e2007-08-20 15:18:04 +0000792 def __bootstrap_inner(self):
Guido van Rossum7f5013a1998-04-09 22:01:42 +0000793 try:
Benjamin Petersond906ea62009-03-31 21:34:42 +0000794 self._set_ident()
Jeffrey Yasskin69e13092008-02-28 06:09:19 +0000795 self.__started.set()
Benjamin Petersonbd9dd312009-03-31 21:06:30 +0000796 with _active_limbo_lock:
797 _active[self.__ident] = self
798 del _limbo[self]
Guido van Rossum7f5013a1998-04-09 22:01:42 +0000799 if __debug__:
800 self._note("%s.__bootstrap(): thread started", self)
Jeremy Hyltonbfccb352003-06-29 16:58:41 +0000801
802 if _trace_hook:
803 self._note("%s.__bootstrap(): registering trace hook", self)
804 _sys.settrace(_trace_hook)
805 if _profile_hook:
806 self._note("%s.__bootstrap(): registering profile hook", self)
807 _sys.setprofile(_profile_hook)
Tim Petersd1b108b2003-06-29 17:24:17 +0000808
Guido van Rossum7f5013a1998-04-09 22:01:42 +0000809 try:
810 self.run()
811 except SystemExit:
812 if __debug__:
813 self._note("%s.__bootstrap(): raised SystemExit", self)
814 except:
815 if __debug__:
816 self._note("%s.__bootstrap(): unhandled exception", self)
Brett Cannoncc4e9352004-07-03 03:52:35 +0000817 # If sys.stderr is no more (most likely from interpreter
818 # shutdown) use self.__stderr. Otherwise still use sys (as in
819 # _sys) in case sys.stderr was redefined since the creation of
820 # self.
Serhiy Storchaka91943462014-09-21 22:08:00 +0300821 if _sys and _sys.stderr is not None:
822 print>>_sys.stderr, ("Exception in thread %s:\n%s" %
823 (self.name, _format_exc()))
824 elif self.__stderr is not None:
Brett Cannoncc4e9352004-07-03 03:52:35 +0000825 # Do the best job possible w/o a huge amt. of code to
826 # approximate a traceback (code ideas from
827 # Lib/traceback.py)
828 exc_type, exc_value, exc_tb = self.__exc_info()
829 try:
830 print>>self.__stderr, (
Benjamin Petersonb6a95562008-08-22 20:43:48 +0000831 "Exception in thread " + self.name +
Brett Cannoncc4e9352004-07-03 03:52:35 +0000832 " (most likely raised during interpreter shutdown):")
833 print>>self.__stderr, (
834 "Traceback (most recent call last):")
835 while exc_tb:
836 print>>self.__stderr, (
837 ' File "%s", line %s, in %s' %
838 (exc_tb.tb_frame.f_code.co_filename,
839 exc_tb.tb_lineno,
840 exc_tb.tb_frame.f_code.co_name))
841 exc_tb = exc_tb.tb_next
842 print>>self.__stderr, ("%s: %s" % (exc_type, exc_value))
843 # Make sure that exc_tb gets deleted since it is a memory
844 # hog; deleting everything else is just for thoroughness
845 finally:
846 del exc_type, exc_value, exc_tb
Guido van Rossum7f5013a1998-04-09 22:01:42 +0000847 else:
848 if __debug__:
849 self._note("%s.__bootstrap(): normal return", self)
Jeffrey Yasskin8b9091f2008-03-28 04:11:18 +0000850 finally:
851 # Prevent a race in
852 # test_threading.test_no_refcycle_through_target when
853 # the exception keeps the target alive past when we
854 # assert that it's dead.
Amaury Forgeot d'Arc504a48f2008-03-29 01:41:08 +0000855 self.__exc_clear()
Guido van Rossum7f5013a1998-04-09 22:01:42 +0000856 finally:
Gregory P. Smith95cd5c02008-01-22 01:20:42 +0000857 with _active_limbo_lock:
858 self.__stop()
859 try:
860 # We don't call self.__delete() because it also
861 # grabs _active_limbo_lock.
862 del _active[_get_ident()]
863 except:
864 pass
Guido van Rossum7f5013a1998-04-09 22:01:42 +0000865
866 def __stop(self):
Antoine Pitrou52849bf2012-04-19 23:55:01 +0200867 # DummyThreads delete self.__block, but they have no waiters to
868 # notify anyway (join() is forbidden on them).
869 if not hasattr(self, '_Thread__block'):
870 return
Raymond Hettinger70ec29d2008-01-24 18:12:23 +0000871 self.__block.acquire()
872 self.__stopped = True
Benjamin Peterson0fbcf692008-06-11 17:27:50 +0000873 self.__block.notify_all()
Raymond Hettinger70ec29d2008-01-24 18:12:23 +0000874 self.__block.release()
Guido van Rossum7f5013a1998-04-09 22:01:42 +0000875
876 def __delete(self):
Tim Peters21429932004-07-21 03:36:52 +0000877 "Remove current thread from the dict of currently running threads."
Brett Cannon8b3d92a2004-07-21 02:21:58 +0000878
Tim Peters21429932004-07-21 03:36:52 +0000879 # Notes about running with dummy_thread:
880 #
881 # Must take care to not raise an exception if dummy_thread is being
882 # used (and thus this module is being used as an instance of
883 # dummy_threading). dummy_thread.get_ident() always returns -1 since
884 # there is only one thread if dummy_thread is being used. Thus
885 # len(_active) is always <= 1 here, and any Thread instance created
886 # overwrites the (if any) thread currently registered in _active.
887 #
888 # An instance of _MainThread is always created by 'threading'. This
889 # gets overwritten the instant an instance of Thread is created; both
890 # threads return -1 from dummy_thread.get_ident() and thus have the
891 # same key in the dict. So when the _MainThread instance created by
892 # 'threading' tries to clean itself up when atexit calls this method
893 # it gets a KeyError if another Thread instance was created.
894 #
895 # This all means that KeyError from trying to delete something from
896 # _active if dummy_threading is being used is a red herring. But
897 # since it isn't if dummy_threading is *not* being used then don't
898 # hide the exception.
Brett Cannon8b3d92a2004-07-21 02:21:58 +0000899
Raymond Hettinger70ec29d2008-01-24 18:12:23 +0000900 try:
Amaury Forgeot d'Arcd7a26512008-04-03 23:07:55 +0000901 with _active_limbo_lock:
Brett Cannon8b3d92a2004-07-21 02:21:58 +0000902 del _active[_get_ident()]
Amaury Forgeot d'Arcd7a26512008-04-03 23:07:55 +0000903 # There must not be any python code between the previous line
904 # and after the lock is released. Otherwise a tracing function
905 # could try to acquire the lock again in the same thread, (in
Benjamin Peterson0fbcf692008-06-11 17:27:50 +0000906 # current_thread()), and would block.
Amaury Forgeot d'Arcd7a26512008-04-03 23:07:55 +0000907 except KeyError:
908 if 'dummy_threading' not in _sys.modules:
909 raise
Guido van Rossum7f5013a1998-04-09 22:01:42 +0000910
911 def join(self, timeout=None):
Raymond Hettinger9f7e2472013-03-08 21:02:13 -0700912 """Wait until the thread terminates.
913
914 This blocks the calling thread until the thread whose join() method is
915 called terminates -- either normally or through an unhandled exception
916 or until the optional timeout occurs.
917
918 When the timeout argument is present and not None, it should be a
919 floating point number specifying a timeout for the operation in seconds
920 (or fractions thereof). As join() always returns None, you must call
921 isAlive() after join() to decide whether a timeout happened -- if the
922 thread is still alive, the join() call timed out.
923
924 When the timeout argument is not present or None, the operation will
925 block until the thread terminates.
926
927 A thread can be join()ed many times.
928
929 join() raises a RuntimeError if an attempt is made to join the current
930 thread as that would cause a deadlock. It is also an error to join() a
931 thread before it has been started and attempts to do so raises the same
932 exception.
933
934 """
Collin Winter50b79ce2007-06-06 00:17:35 +0000935 if not self.__initialized:
936 raise RuntimeError("Thread.__init__() not called")
Benjamin Peterson0fbcf692008-06-11 17:27:50 +0000937 if not self.__started.is_set():
Collin Winter50b79ce2007-06-06 00:17:35 +0000938 raise RuntimeError("cannot join thread before it is started")
Benjamin Peterson0fbcf692008-06-11 17:27:50 +0000939 if self is current_thread():
Collin Winter50b79ce2007-06-06 00:17:35 +0000940 raise RuntimeError("cannot join current thread")
941
Guido van Rossum7f5013a1998-04-09 22:01:42 +0000942 if __debug__:
943 if not self.__stopped:
944 self._note("%s.join(): waiting until thread stops", self)
Raymond Hettinger70ec29d2008-01-24 18:12:23 +0000945 self.__block.acquire()
946 try:
Brett Cannonad07ff22005-11-23 02:15:50 +0000947 if timeout is None:
948 while not self.__stopped:
949 self.__block.wait()
Guido van Rossum7f5013a1998-04-09 22:01:42 +0000950 if __debug__:
951 self._note("%s.join(): thread stopped", self)
Brett Cannonad07ff22005-11-23 02:15:50 +0000952 else:
953 deadline = _time() + timeout
954 while not self.__stopped:
955 delay = deadline - _time()
956 if delay <= 0:
957 if __debug__:
958 self._note("%s.join(): timed out", self)
959 break
960 self.__block.wait(delay)
961 else:
962 if __debug__:
963 self._note("%s.join(): thread stopped", self)
Raymond Hettinger70ec29d2008-01-24 18:12:23 +0000964 finally:
965 self.__block.release()
Guido van Rossum7f5013a1998-04-09 22:01:42 +0000966
Benjamin Petersoncbae8692008-08-18 17:45:09 +0000967 @property
968 def name(self):
Raymond Hettinger9f7e2472013-03-08 21:02:13 -0700969 """A string used for identification purposes only.
970
971 It has no semantics. Multiple threads may be given the same name. The
972 initial name is set by the constructor.
973
974 """
Guido van Rossum7f5013a1998-04-09 22:01:42 +0000975 assert self.__initialized, "Thread.__init__() not called"
976 return self.__name
977
Benjamin Petersoncbae8692008-08-18 17:45:09 +0000978 @name.setter
979 def name(self, name):
Guido van Rossum7f5013a1998-04-09 22:01:42 +0000980 assert self.__initialized, "Thread.__init__() not called"
981 self.__name = str(name)
982
Benjamin Petersond8a89722008-08-18 16:40:03 +0000983 @property
984 def ident(self):
Raymond Hettinger9f7e2472013-03-08 21:02:13 -0700985 """Thread identifier of this thread or None if it has not been started.
986
987 This is a nonzero integer. See the thread.get_ident() function. Thread
988 identifiers may be recycled when a thread exits and another thread is
989 created. The identifier is available even after the thread has exited.
990
991 """
Gregory P. Smith8856dda2008-06-01 23:48:47 +0000992 assert self.__initialized, "Thread.__init__() not called"
993 return self.__ident
994
Benjamin Peterson973e6c22008-09-01 23:12:58 +0000995 def isAlive(self):
Raymond Hettinger9f7e2472013-03-08 21:02:13 -0700996 """Return whether the thread is alive.
997
998 This method returns True just before the run() method starts until just
999 after the run() method terminates. The module function enumerate()
1000 returns a list of all alive threads.
1001
1002 """
Guido van Rossum7f5013a1998-04-09 22:01:42 +00001003 assert self.__initialized, "Thread.__init__() not called"
Benjamin Peterson0fbcf692008-06-11 17:27:50 +00001004 return self.__started.is_set() and not self.__stopped
Tim Petersb90f89a2001-01-15 03:26:36 +00001005
Benjamin Peterson973e6c22008-09-01 23:12:58 +00001006 is_alive = isAlive
Benjamin Peterson6ee1a312008-08-18 21:53:29 +00001007
Benjamin Petersoncbae8692008-08-18 17:45:09 +00001008 @property
1009 def daemon(self):
Raymond Hettinger9f7e2472013-03-08 21:02:13 -07001010 """A boolean value indicating whether this thread is a daemon thread (True) or not (False).
1011
1012 This must be set before start() is called, otherwise RuntimeError is
1013 raised. Its initial value is inherited from the creating thread; the
1014 main thread is not a daemon thread and therefore all threads created in
1015 the main thread default to daemon = False.
1016
1017 The entire Python program exits when no alive non-daemon threads are
1018 left.
1019
1020 """
Guido van Rossum7f5013a1998-04-09 22:01:42 +00001021 assert self.__initialized, "Thread.__init__() not called"
1022 return self.__daemonic
1023
Benjamin Petersoncbae8692008-08-18 17:45:09 +00001024 @daemon.setter
1025 def daemon(self, daemonic):
Collin Winter50b79ce2007-06-06 00:17:35 +00001026 if not self.__initialized:
1027 raise RuntimeError("Thread.__init__() not called")
Benjamin Peterson0fbcf692008-06-11 17:27:50 +00001028 if self.__started.is_set():
Collin Winter50b79ce2007-06-06 00:17:35 +00001029 raise RuntimeError("cannot set daemon status of active thread");
Guido van Rossum7f5013a1998-04-09 22:01:42 +00001030 self.__daemonic = daemonic
1031
Benjamin Petersond8106262008-08-18 18:13:17 +00001032 def isDaemon(self):
1033 return self.daemon
1034
1035 def setDaemon(self, daemonic):
1036 self.daemon = daemonic
1037
1038 def getName(self):
1039 return self.name
1040
1041 def setName(self, name):
1042 self.name = name
1043
Martin v. Löwis44f86962001-09-05 13:44:54 +00001044# The timer class was contributed by Itamar Shtull-Trauring
1045
1046def Timer(*args, **kwargs):
Raymond Hettinger9f7e2472013-03-08 21:02:13 -07001047 """Factory function to create a Timer object.
1048
1049 Timers call a function after a specified number of seconds:
1050
1051 t = Timer(30.0, f, args=[], kwargs={})
1052 t.start()
1053 t.cancel() # stop the timer's action if it's still waiting
1054
1055 """
Martin v. Löwis44f86962001-09-05 13:44:54 +00001056 return _Timer(*args, **kwargs)
1057
1058class _Timer(Thread):
1059 """Call a function after a specified number of seconds:
Tim Petersb64bec32001-09-18 02:26:39 +00001060
Raymond Hettinger9f7e2472013-03-08 21:02:13 -07001061 t = Timer(30.0, f, args=[], kwargs={})
1062 t.start()
1063 t.cancel() # stop the timer's action if it's still waiting
1064
Martin v. Löwis44f86962001-09-05 13:44:54 +00001065 """
Tim Petersb64bec32001-09-18 02:26:39 +00001066
Martin v. Löwis44f86962001-09-05 13:44:54 +00001067 def __init__(self, interval, function, args=[], kwargs={}):
1068 Thread.__init__(self)
1069 self.interval = interval
1070 self.function = function
1071 self.args = args
1072 self.kwargs = kwargs
1073 self.finished = Event()
Tim Petersb64bec32001-09-18 02:26:39 +00001074
Martin v. Löwis44f86962001-09-05 13:44:54 +00001075 def cancel(self):
1076 """Stop the timer if it hasn't finished yet"""
1077 self.finished.set()
Tim Petersb64bec32001-09-18 02:26:39 +00001078
Martin v. Löwis44f86962001-09-05 13:44:54 +00001079 def run(self):
1080 self.finished.wait(self.interval)
Benjamin Peterson0fbcf692008-06-11 17:27:50 +00001081 if not self.finished.is_set():
Martin v. Löwis44f86962001-09-05 13:44:54 +00001082 self.function(*self.args, **self.kwargs)
1083 self.finished.set()
Guido van Rossum7f5013a1998-04-09 22:01:42 +00001084
1085# Special thread class to represent the main thread
1086# This is garbage collected through an exit handler
1087
1088class _MainThread(Thread):
1089
1090 def __init__(self):
1091 Thread.__init__(self, name="MainThread")
Jeffrey Yasskin69e13092008-02-28 06:09:19 +00001092 self._Thread__started.set()
Benjamin Petersond906ea62009-03-31 21:34:42 +00001093 self._set_ident()
Benjamin Petersonbd9dd312009-03-31 21:06:30 +00001094 with _active_limbo_lock:
1095 _active[_get_ident()] = self
Guido van Rossum7f5013a1998-04-09 22:01:42 +00001096
1097 def _set_daemon(self):
Guido van Rossum8ca162f2002-04-07 06:36:23 +00001098 return False
Guido van Rossum7f5013a1998-04-09 22:01:42 +00001099
Martin v. Löwis7b7c9d42007-01-04 21:06:12 +00001100 def _exitfunc(self):
Guido van Rossum7f5013a1998-04-09 22:01:42 +00001101 self._Thread__stop()
1102 t = _pickSomeNonDaemonThread()
1103 if t:
1104 if __debug__:
1105 self._note("%s: waiting for other threads", self)
1106 while t:
1107 t.join()
1108 t = _pickSomeNonDaemonThread()
Guido van Rossum7f5013a1998-04-09 22:01:42 +00001109 if __debug__:
1110 self._note("%s: exiting", self)
1111 self._Thread__delete()
1112
1113def _pickSomeNonDaemonThread():
1114 for t in enumerate():
Benjamin Petersoncbae8692008-08-18 17:45:09 +00001115 if not t.daemon and t.is_alive():
Guido van Rossum7f5013a1998-04-09 22:01:42 +00001116 return t
1117 return None
1118
1119
1120# Dummy thread class to represent threads not started here.
Tim Peters711906e2005-01-08 07:30:42 +00001121# These aren't garbage collected when they die, nor can they be waited for.
Benjamin Peterson0fbcf692008-06-11 17:27:50 +00001122# If they invoke anything in threading.py that calls current_thread(), they
Tim Peters711906e2005-01-08 07:30:42 +00001123# leave an entry in the _active dict forever after.
Benjamin Peterson0fbcf692008-06-11 17:27:50 +00001124# Their purpose is to return *something* from current_thread().
Guido van Rossum7f5013a1998-04-09 22:01:42 +00001125# They are marked as daemon threads so we won't wait for them
1126# when we exit (conform previous semantics).
1127
1128class _DummyThread(Thread):
Tim Petersb90f89a2001-01-15 03:26:36 +00001129
Guido van Rossum7f5013a1998-04-09 22:01:42 +00001130 def __init__(self):
1131 Thread.__init__(self, name=_newname("Dummy-%d"))
Tim Peters711906e2005-01-08 07:30:42 +00001132
1133 # Thread.__block consumes an OS-level locking primitive, which
1134 # can never be used by a _DummyThread. Since a _DummyThread
1135 # instance is immortal, that's bad, so release this resource.
Brett Cannone6539c42005-01-08 02:43:53 +00001136 del self._Thread__block
Tim Peters711906e2005-01-08 07:30:42 +00001137
Jeffrey Yasskin69e13092008-02-28 06:09:19 +00001138 self._Thread__started.set()
Benjamin Petersond906ea62009-03-31 21:34:42 +00001139 self._set_ident()
Benjamin Petersonbd9dd312009-03-31 21:06:30 +00001140 with _active_limbo_lock:
1141 _active[_get_ident()] = self
Guido van Rossum7f5013a1998-04-09 22:01:42 +00001142
1143 def _set_daemon(self):
Guido van Rossum8ca162f2002-04-07 06:36:23 +00001144 return True
Guido van Rossum7f5013a1998-04-09 22:01:42 +00001145
Neal Norwitz45bec8c2002-02-19 03:01:36 +00001146 def join(self, timeout=None):
Guido van Rossum8ca162f2002-04-07 06:36:23 +00001147 assert False, "cannot join a dummy thread"
Guido van Rossum7f5013a1998-04-09 22:01:42 +00001148
1149
1150# Global API functions
1151
Benjamin Peterson973e6c22008-09-01 23:12:58 +00001152def currentThread():
Raymond Hettinger9f7e2472013-03-08 21:02:13 -07001153 """Return the current Thread object, corresponding to the caller's thread of control.
1154
1155 If the caller's thread of control was not created through the threading
1156 module, a dummy thread object with limited functionality is returned.
1157
1158 """
Guido van Rossum7f5013a1998-04-09 22:01:42 +00001159 try:
1160 return _active[_get_ident()]
1161 except KeyError:
Benjamin Peterson0fbcf692008-06-11 17:27:50 +00001162 ##print "current_thread(): no current thread for", _get_ident()
Guido van Rossum7f5013a1998-04-09 22:01:42 +00001163 return _DummyThread()
1164
Benjamin Peterson973e6c22008-09-01 23:12:58 +00001165current_thread = currentThread
Benjamin Petersonf4395602008-06-11 17:50:00 +00001166
Benjamin Peterson973e6c22008-09-01 23:12:58 +00001167def activeCount():
Raymond Hettinger9f7e2472013-03-08 21:02:13 -07001168 """Return the number of Thread objects currently alive.
1169
1170 The returned count is equal to the length of the list returned by
1171 enumerate().
1172
1173 """
Benjamin Petersonbd9dd312009-03-31 21:06:30 +00001174 with _active_limbo_lock:
1175 return len(_active) + len(_limbo)
Guido van Rossum7f5013a1998-04-09 22:01:42 +00001176
Benjamin Peterson973e6c22008-09-01 23:12:58 +00001177active_count = activeCount
Benjamin Petersonf4395602008-06-11 17:50:00 +00001178
Antoine Pitrou99c160b2009-11-05 13:42:29 +00001179def _enumerate():
1180 # Same as enumerate(), but without the lock. Internal use only.
1181 return _active.values() + _limbo.values()
1182
Guido van Rossum7f5013a1998-04-09 22:01:42 +00001183def enumerate():
Raymond Hettinger9f7e2472013-03-08 21:02:13 -07001184 """Return a list of all Thread objects currently alive.
1185
1186 The list includes daemonic threads, dummy thread objects created by
1187 current_thread(), and the main thread. It excludes terminated threads and
1188 threads that have not yet been started.
1189
1190 """
Benjamin Petersonbd9dd312009-03-31 21:06:30 +00001191 with _active_limbo_lock:
1192 return _active.values() + _limbo.values()
Guido van Rossum7f5013a1998-04-09 22:01:42 +00001193
Andrew MacIntyre92913322006-06-13 15:04:24 +00001194from thread import stack_size
1195
Martin v. Löwis7b7c9d42007-01-04 21:06:12 +00001196# Create the main thread object,
1197# and make it available for the interpreter
1198# (Py_Main) as threading._shutdown.
Guido van Rossum7f5013a1998-04-09 22:01:42 +00001199
Martin v. Löwis7b7c9d42007-01-04 21:06:12 +00001200_shutdown = _MainThread()._exitfunc
Guido van Rossum7f5013a1998-04-09 22:01:42 +00001201
Jim Fultond15dc062004-07-14 19:11:50 +00001202# get thread-local implementation, either from the thread
1203# module, or from the python fallback
1204
1205try:
1206 from thread import _local as local
1207except ImportError:
1208 from _threading_local import local
1209
Guido van Rossum7f5013a1998-04-09 22:01:42 +00001210
Jesse Noller5e62ca42008-07-16 20:03:47 +00001211def _after_fork():
1212 # This function is called by Python/ceval.c:PyEval_ReInitThreads which
1213 # is called from PyOS_AfterFork. Here we cleanup threading module state
1214 # that should not exist after a fork.
1215
1216 # Reset _active_limbo_lock, in case we forked while the lock was held
1217 # by another (non-forked) thread. http://bugs.python.org/issue874900
1218 global _active_limbo_lock
1219 _active_limbo_lock = _allocate_lock()
1220
1221 # fork() only copied the current thread; clear references to others.
1222 new_active = {}
1223 current = current_thread()
1224 with _active_limbo_lock:
Charles-François Natali30a54452013-08-30 23:30:50 +02001225 for thread in _enumerate():
Charles-François Natali41616302011-12-18 18:22:24 +01001226 # Any lock/condition variable may be currently locked or in an
1227 # invalid state, so we reinitialize them.
1228 if hasattr(thread, '_reset_internal_locks'):
1229 thread._reset_internal_locks()
Jesse Noller5e62ca42008-07-16 20:03:47 +00001230 if thread is current:
Antoine Pitrou9fb1aca2008-09-06 23:04:32 +00001231 # There is only one active thread. We reset the ident to
1232 # its new value since it can have changed.
1233 ident = _get_ident()
1234 thread._Thread__ident = ident
Jesse Noller5e62ca42008-07-16 20:03:47 +00001235 new_active[ident] = thread
1236 else:
1237 # All the others are already stopped.
Charles-François Natali41616302011-12-18 18:22:24 +01001238 thread._Thread__stop()
Jesse Noller5e62ca42008-07-16 20:03:47 +00001239
1240 _limbo.clear()
1241 _active.clear()
1242 _active.update(new_active)
1243 assert len(_active) == 1
1244
1245
Guido van Rossum7f5013a1998-04-09 22:01:42 +00001246# Self-test code
1247
1248def _test():
1249
Guido van Rossum7f5013a1998-04-09 22:01:42 +00001250 class BoundedQueue(_Verbose):
1251
1252 def __init__(self, limit):
1253 _Verbose.__init__(self)
1254 self.mon = RLock()
1255 self.rc = Condition(self.mon)
1256 self.wc = Condition(self.mon)
1257 self.limit = limit
Brian Curtina9391052012-08-09 23:04:42 -05001258 self.queue = _deque()
Guido van Rossum7f5013a1998-04-09 22:01:42 +00001259
1260 def put(self, item):
1261 self.mon.acquire()
1262 while len(self.queue) >= self.limit:
1263 self._note("put(%s): queue full", item)
1264 self.wc.wait()
1265 self.queue.append(item)
1266 self._note("put(%s): appended, length now %d",
1267 item, len(self.queue))
1268 self.rc.notify()
1269 self.mon.release()
1270
1271 def get(self):
1272 self.mon.acquire()
1273 while not self.queue:
1274 self._note("get(): queue empty")
1275 self.rc.wait()
Raymond Hettinger756b3f32004-01-29 06:37:52 +00001276 item = self.queue.popleft()
Guido van Rossum7f5013a1998-04-09 22:01:42 +00001277 self._note("get(): got %s, %d left", item, len(self.queue))
1278 self.wc.notify()
1279 self.mon.release()
1280 return item
1281
1282 class ProducerThread(Thread):
1283
1284 def __init__(self, queue, quota):
1285 Thread.__init__(self, name="Producer")
1286 self.queue = queue
1287 self.quota = quota
1288
1289 def run(self):
Guido van Rossumb26a1b41998-05-20 17:05:52 +00001290 from random import random
Guido van Rossum7f5013a1998-04-09 22:01:42 +00001291 counter = 0
1292 while counter < self.quota:
1293 counter = counter + 1
Benjamin Petersoncbae8692008-08-18 17:45:09 +00001294 self.queue.put("%s.%d" % (self.name, counter))
Guido van Rossum7f5013a1998-04-09 22:01:42 +00001295 _sleep(random() * 0.00001)
1296
1297
1298 class ConsumerThread(Thread):
1299
1300 def __init__(self, queue, count):
1301 Thread.__init__(self, name="Consumer")
1302 self.queue = queue
1303 self.count = count
1304
1305 def run(self):
1306 while self.count > 0:
1307 item = self.queue.get()
1308 print item
1309 self.count = self.count - 1
1310
Guido van Rossum7f5013a1998-04-09 22:01:42 +00001311 NP = 3
1312 QL = 4
1313 NI = 5
1314
1315 Q = BoundedQueue(QL)
1316 P = []
1317 for i in range(NP):
1318 t = ProducerThread(Q, NI)
Benjamin Petersoncbae8692008-08-18 17:45:09 +00001319 t.name = ("Producer-%d" % (i+1))
Guido van Rossum7f5013a1998-04-09 22:01:42 +00001320 P.append(t)
1321 C = ConsumerThread(Q, NI*NP)
1322 for t in P:
1323 t.start()
1324 _sleep(0.000001)
1325 C.start()
1326 for t in P:
1327 t.join()
1328 C.join()
1329
1330if __name__ == '__main__':
1331 _test()