| Antoine Pitrou | 64a467d | 2010-12-12 20:34:49 +0000 | [diff] [blame] | 1 | :mod:`threading` --- Thread-based parallelism | 
 | 2 | ============================================= | 
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 3 |  | 
 | 4 | .. module:: threading | 
| Antoine Pitrou | 64a467d | 2010-12-12 20:34:49 +0000 | [diff] [blame] | 5 |    :synopsis: Thread-based parallelism. | 
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 6 |  | 
| Raymond Hettinger | 1048094 | 2011-01-10 03:26:08 +0000 | [diff] [blame] | 7 | **Source code:** :source:`Lib/threading.py` | 
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 8 |  | 
| Raymond Hettinger | 4f707fd | 2011-01-10 19:54:11 +0000 | [diff] [blame] | 9 | -------------- | 
 | 10 |  | 
| Georg Brandl | 2067bfd | 2008-05-25 13:05:15 +0000 | [diff] [blame] | 11 | This module constructs higher-level threading interfaces on top of the lower | 
 | 12 | level :mod:`_thread` module.  See also the :mod:`queue` module. | 
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 13 |  | 
 | 14 | The :mod:`dummy_threading` module is provided for situations where | 
| Georg Brandl | 2067bfd | 2008-05-25 13:05:15 +0000 | [diff] [blame] | 15 | :mod:`threading` cannot be used because :mod:`_thread` is missing. | 
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 16 |  | 
| Benjamin Peterson | 8bdd545 | 2008-08-18 22:38:41 +0000 | [diff] [blame] | 17 | .. note:: | 
 | 18 |  | 
| Benjamin Peterson | b3085c9 | 2008-09-01 23:09:31 +0000 | [diff] [blame] | 19 |    While they are not listed below, the ``camelCase`` names used for some | 
 | 20 |    methods and functions in this module in the Python 2.x series are still | 
 | 21 |    supported by this module. | 
| Benjamin Peterson | 8bdd545 | 2008-08-18 22:38:41 +0000 | [diff] [blame] | 22 |  | 
| Antoine Pitrou | 0034281 | 2011-01-06 16:31:28 +0000 | [diff] [blame] | 23 |  | 
| R David Murray | ef4d286 | 2012-10-06 14:35:35 -0400 | [diff] [blame] | 24 | This module defines the following functions: | 
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 25 |  | 
 | 26 |  | 
| Benjamin Peterson | 672b803 | 2008-06-11 19:14:14 +0000 | [diff] [blame] | 27 | .. function:: active_count() | 
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 28 |  | 
 | 29 |    Return the number of :class:`Thread` objects currently alive.  The returned | 
| Benjamin Peterson | 4ac9ce4 | 2009-10-04 14:49:41 +0000 | [diff] [blame] | 30 |    count is equal to the length of the list returned by :func:`.enumerate`. | 
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 31 |  | 
 | 32 |  | 
| Benjamin Peterson | 672b803 | 2008-06-11 19:14:14 +0000 | [diff] [blame] | 33 | .. function:: current_thread() | 
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 34 |  | 
 | 35 |    Return the current :class:`Thread` object, corresponding to the caller's thread | 
 | 36 |    of control.  If the caller's thread of control was not created through the | 
 | 37 |    :mod:`threading` module, a dummy thread object with limited functionality is | 
 | 38 |    returned. | 
 | 39 |  | 
 | 40 |  | 
| Victor Stinner | 2a12974 | 2011-05-30 23:02:52 +0200 | [diff] [blame] | 41 | .. function:: get_ident() | 
 | 42 |  | 
 | 43 |    Return the 'thread identifier' of the current thread.  This is a nonzero | 
 | 44 |    integer.  Its value has no direct meaning; it is intended as a magic cookie | 
 | 45 |    to be used e.g. to index a dictionary of thread-specific data.  Thread | 
 | 46 |    identifiers may be recycled when a thread exits and another thread is | 
 | 47 |    created. | 
 | 48 |  | 
 | 49 |    .. versionadded:: 3.3 | 
 | 50 |  | 
 | 51 |  | 
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 52 | .. function:: enumerate() | 
 | 53 |  | 
| Benjamin Peterson | 672b803 | 2008-06-11 19:14:14 +0000 | [diff] [blame] | 54 |    Return a list of all :class:`Thread` objects currently alive.  The list | 
 | 55 |    includes daemonic threads, dummy thread objects created by | 
 | 56 |    :func:`current_thread`, and the main thread.  It excludes terminated threads | 
 | 57 |    and threads that have not yet been started. | 
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 58 |  | 
 | 59 |  | 
| Andrew Svetlov | 58b5c5a | 2013-09-04 07:01:07 +0300 | [diff] [blame] | 60 | .. function:: main_thread() | 
 | 61 |  | 
 | 62 |    Return the main :class:`Thread` object.  In normal conditions, the | 
 | 63 |    main thread is the thread from which the Python interpreter was | 
 | 64 |    started. | 
 | 65 |  | 
 | 66 |    .. versionadded:: 3.4 | 
 | 67 |  | 
 | 68 |  | 
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 69 | .. function:: settrace(func) | 
 | 70 |  | 
 | 71 |    .. index:: single: trace function | 
 | 72 |  | 
 | 73 |    Set a trace function for all threads started from the :mod:`threading` module. | 
 | 74 |    The *func* will be passed to  :func:`sys.settrace` for each thread, before its | 
| Serhiy Storchaka | 9e0ae53 | 2013-08-24 00:23:38 +0300 | [diff] [blame] | 75 |    :meth:`~Thread.run` method is called. | 
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 76 |  | 
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 77 |  | 
 | 78 | .. function:: setprofile(func) | 
 | 79 |  | 
 | 80 |    .. index:: single: profile function | 
 | 81 |  | 
 | 82 |    Set a profile function for all threads started from the :mod:`threading` module. | 
 | 83 |    The *func* will be passed to  :func:`sys.setprofile` for each thread, before its | 
| Serhiy Storchaka | 9e0ae53 | 2013-08-24 00:23:38 +0300 | [diff] [blame] | 84 |    :meth:`~Thread.run` method is called. | 
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 85 |  | 
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 86 |  | 
 | 87 | .. function:: stack_size([size]) | 
 | 88 |  | 
 | 89 |    Return the thread stack size used when creating new threads.  The optional | 
 | 90 |    *size* argument specifies the stack size to be used for subsequently created | 
 | 91 |    threads, and must be 0 (use platform or configured default) or a positive | 
| Serhiy Storchaka | f8def28 | 2013-02-16 17:29:56 +0200 | [diff] [blame] | 92 |    integer value of at least 32,768 (32 KiB). If changing the thread stack size is | 
| Georg Brandl | 9a13b43 | 2012-04-05 09:53:04 +0200 | [diff] [blame] | 93 |    unsupported, a :exc:`RuntimeError` is raised.  If the specified stack size is | 
| Serhiy Storchaka | f8def28 | 2013-02-16 17:29:56 +0200 | [diff] [blame] | 94 |    invalid, a :exc:`ValueError` is raised and the stack size is unmodified.  32 KiB | 
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 95 |    is currently the minimum supported stack size value to guarantee sufficient | 
 | 96 |    stack space for the interpreter itself.  Note that some platforms may have | 
 | 97 |    particular restrictions on values for the stack size, such as requiring a | 
| Serhiy Storchaka | f8def28 | 2013-02-16 17:29:56 +0200 | [diff] [blame] | 98 |    minimum stack size > 32 KiB or requiring allocation in multiples of the system | 
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 99 |    memory page size - platform documentation should be referred to for more | 
| Serhiy Storchaka | f8def28 | 2013-02-16 17:29:56 +0200 | [diff] [blame] | 100 |    information (4 KiB pages are common; using multiples of 4096 for the stack size is | 
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 101 |    the suggested approach in the absence of more specific information). | 
 | 102 |    Availability: Windows, systems with POSIX threads. | 
 | 103 |  | 
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 104 |  | 
| Antoine Pitrou | 7c3e577 | 2010-04-14 15:44:10 +0000 | [diff] [blame] | 105 | This module also defines the following constant: | 
 | 106 |  | 
 | 107 | .. data:: TIMEOUT_MAX | 
 | 108 |  | 
 | 109 |    The maximum value allowed for the *timeout* parameter of blocking functions | 
 | 110 |    (:meth:`Lock.acquire`, :meth:`RLock.acquire`, :meth:`Condition.wait`, etc.). | 
| Georg Brandl | 6faee4e | 2010-09-21 14:48:28 +0000 | [diff] [blame] | 111 |    Specifying a timeout greater than this value will raise an | 
| Antoine Pitrou | 7c3e577 | 2010-04-14 15:44:10 +0000 | [diff] [blame] | 112 |    :exc:`OverflowError`. | 
 | 113 |  | 
| Antoine Pitrou | adbc009 | 2010-04-19 14:05:51 +0000 | [diff] [blame] | 114 |    .. versionadded:: 3.2 | 
| Antoine Pitrou | 7c3e577 | 2010-04-14 15:44:10 +0000 | [diff] [blame] | 115 |  | 
| Georg Brandl | 67b21b7 | 2010-08-17 15:07:14 +0000 | [diff] [blame] | 116 |  | 
| R David Murray | ef4d286 | 2012-10-06 14:35:35 -0400 | [diff] [blame] | 117 | This module defines a number of classes, which are detailed in the sections | 
 | 118 | below. | 
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 119 |  | 
 | 120 | The design of this module is loosely based on Java's threading model. However, | 
 | 121 | where Java makes locks and condition variables basic behavior of every object, | 
 | 122 | they are separate objects in Python.  Python's :class:`Thread` class supports a | 
 | 123 | subset of the behavior of Java's Thread class; currently, there are no | 
 | 124 | priorities, no thread groups, and threads cannot be destroyed, stopped, | 
 | 125 | suspended, resumed, or interrupted.  The static methods of Java's Thread class, | 
 | 126 | when implemented, are mapped to module-level functions. | 
 | 127 |  | 
 | 128 | All of the methods described below are executed atomically. | 
 | 129 |  | 
 | 130 |  | 
| R David Murray | ef4d286 | 2012-10-06 14:35:35 -0400 | [diff] [blame] | 131 | Thread-Local Data | 
 | 132 | ----------------- | 
 | 133 |  | 
 | 134 | Thread-local data is data whose values are thread specific.  To manage | 
 | 135 | thread-local data, just create an instance of :class:`local` (or a | 
 | 136 | subclass) and store attributes on it:: | 
 | 137 |  | 
 | 138 |   mydata = threading.local() | 
 | 139 |   mydata.x = 1 | 
 | 140 |  | 
 | 141 | The instance's values will be different for separate threads. | 
 | 142 |  | 
 | 143 |  | 
 | 144 | .. class:: local() | 
 | 145 |  | 
 | 146 |    A class that represents thread-local data. | 
 | 147 |  | 
 | 148 |    For more details and extensive examples, see the documentation string of the | 
 | 149 |    :mod:`_threading_local` module. | 
 | 150 |  | 
 | 151 |  | 
| Georg Brandl | a971c65 | 2008-11-07 09:39:56 +0000 | [diff] [blame] | 152 | .. _thread-objects: | 
 | 153 |  | 
 | 154 | Thread Objects | 
 | 155 | -------------- | 
 | 156 |  | 
| R David Murray | ef4d286 | 2012-10-06 14:35:35 -0400 | [diff] [blame] | 157 | The :class:`Thread` class represents an activity that is run in a separate | 
 | 158 | thread of control.  There are two ways to specify the activity: by passing a | 
 | 159 | callable object to the constructor, or by overriding the :meth:`~Thread.run` | 
 | 160 | method in a subclass.  No other methods (except for the constructor) should be | 
 | 161 | overridden in a subclass.  In other words, *only*  override the | 
 | 162 | :meth:`~Thread.__init__` and :meth:`~Thread.run` methods of this class. | 
| Georg Brandl | a971c65 | 2008-11-07 09:39:56 +0000 | [diff] [blame] | 163 |  | 
 | 164 | Once a thread object is created, its activity must be started by calling the | 
| Antoine Pitrou | 2c9f104 | 2012-04-10 22:35:53 +0200 | [diff] [blame] | 165 | thread's :meth:`~Thread.start` method.  This invokes the :meth:`~Thread.run` | 
 | 166 | method in a separate thread of control. | 
| Georg Brandl | a971c65 | 2008-11-07 09:39:56 +0000 | [diff] [blame] | 167 |  | 
 | 168 | Once the thread's activity is started, the thread is considered 'alive'. It | 
| Antoine Pitrou | 2c9f104 | 2012-04-10 22:35:53 +0200 | [diff] [blame] | 169 | stops being alive when its :meth:`~Thread.run` method terminates -- either | 
 | 170 | normally, or by raising an unhandled exception.  The :meth:`~Thread.is_alive` | 
 | 171 | method tests whether the thread is alive. | 
| Georg Brandl | a971c65 | 2008-11-07 09:39:56 +0000 | [diff] [blame] | 172 |  | 
| Antoine Pitrou | 2c9f104 | 2012-04-10 22:35:53 +0200 | [diff] [blame] | 173 | Other threads can call a thread's :meth:`~Thread.join` method.  This blocks | 
 | 174 | the calling thread until the thread whose :meth:`~Thread.join` method is | 
 | 175 | called is terminated. | 
| Georg Brandl | a971c65 | 2008-11-07 09:39:56 +0000 | [diff] [blame] | 176 |  | 
 | 177 | A thread has a name.  The name can be passed to the constructor, and read or | 
| Antoine Pitrou | 2c9f104 | 2012-04-10 22:35:53 +0200 | [diff] [blame] | 178 | changed through the :attr:`~Thread.name` attribute. | 
| Georg Brandl | a971c65 | 2008-11-07 09:39:56 +0000 | [diff] [blame] | 179 |  | 
 | 180 | A thread can be flagged as a "daemon thread".  The significance of this flag is | 
 | 181 | that the entire Python program exits when only daemon threads are left.  The | 
 | 182 | initial value is inherited from the creating thread.  The flag can be set | 
| Antoine Pitrou | 61d85ba | 2012-04-10 22:51:26 +0200 | [diff] [blame] | 183 | through the :attr:`~Thread.daemon` property or the *daemon* constructor | 
 | 184 | argument. | 
| Georg Brandl | a971c65 | 2008-11-07 09:39:56 +0000 | [diff] [blame] | 185 |  | 
| Antoine Pitrou | 38b8254 | 2013-02-15 21:27:18 +0100 | [diff] [blame] | 186 | .. note:: | 
 | 187 |    Daemon threads are abruptly stopped at shutdown.  Their resources (such | 
 | 188 |    as open files, database transactions, etc.) may not be released properly. | 
 | 189 |    If you want your threads to stop gracefully, make them non-daemonic and | 
 | 190 |    use a suitable signalling mechanism such as an :class:`Event`. | 
 | 191 |  | 
| Georg Brandl | a971c65 | 2008-11-07 09:39:56 +0000 | [diff] [blame] | 192 | There is a "main thread" object; this corresponds to the initial thread of | 
 | 193 | control in the Python program.  It is not a daemon thread. | 
 | 194 |  | 
 | 195 | There is the possibility that "dummy thread objects" are created. These are | 
 | 196 | thread objects corresponding to "alien threads", which are threads of control | 
 | 197 | started outside the threading module, such as directly from C code.  Dummy | 
 | 198 | thread objects have limited functionality; they are always considered alive and | 
| Antoine Pitrou | 2c9f104 | 2012-04-10 22:35:53 +0200 | [diff] [blame] | 199 | daemonic, and cannot be :meth:`~Thread.join`\ ed.  They are never deleted, | 
 | 200 | since it is impossible to detect the termination of alien threads. | 
| Georg Brandl | a971c65 | 2008-11-07 09:39:56 +0000 | [diff] [blame] | 201 |  | 
 | 202 |  | 
| Ezio Melotti | 8b61611 | 2012-09-08 20:49:18 +0300 | [diff] [blame] | 203 | .. class:: Thread(group=None, target=None, name=None, args=(), kwargs={}, *, \ | 
 | 204 |                   daemon=None) | 
| Georg Brandl | a971c65 | 2008-11-07 09:39:56 +0000 | [diff] [blame] | 205 |  | 
| Georg Brandl | 7a72b3a | 2009-07-26 14:48:09 +0000 | [diff] [blame] | 206 |    This constructor should always be called with keyword arguments.  Arguments | 
 | 207 |    are: | 
| Georg Brandl | a971c65 | 2008-11-07 09:39:56 +0000 | [diff] [blame] | 208 |  | 
 | 209 |    *group* should be ``None``; reserved for future extension when a | 
 | 210 |    :class:`ThreadGroup` class is implemented. | 
 | 211 |  | 
 | 212 |    *target* is the callable object to be invoked by the :meth:`run` method. | 
 | 213 |    Defaults to ``None``, meaning nothing is called. | 
 | 214 |  | 
| Georg Brandl | 7a72b3a | 2009-07-26 14:48:09 +0000 | [diff] [blame] | 215 |    *name* is the thread name.  By default, a unique name is constructed of the | 
 | 216 |    form "Thread-*N*" where *N* is a small decimal number. | 
| Georg Brandl | a971c65 | 2008-11-07 09:39:56 +0000 | [diff] [blame] | 217 |  | 
 | 218 |    *args* is the argument tuple for the target invocation.  Defaults to ``()``. | 
 | 219 |  | 
 | 220 |    *kwargs* is a dictionary of keyword arguments for the target invocation. | 
 | 221 |    Defaults to ``{}``. | 
 | 222 |  | 
| Antoine Pitrou | 0bd4deb | 2011-02-25 22:07:43 +0000 | [diff] [blame] | 223 |    If not ``None``, *daemon* explicitly sets whether the thread is daemonic. | 
 | 224 |    If ``None`` (the default), the daemonic property is inherited from the | 
 | 225 |    current thread. | 
 | 226 |  | 
| Georg Brandl | 7a72b3a | 2009-07-26 14:48:09 +0000 | [diff] [blame] | 227 |    If the subclass overrides the constructor, it must make sure to invoke the | 
 | 228 |    base class constructor (``Thread.__init__()``) before doing anything else to | 
 | 229 |    the thread. | 
| Georg Brandl | a971c65 | 2008-11-07 09:39:56 +0000 | [diff] [blame] | 230 |  | 
| Antoine Pitrou | 0bd4deb | 2011-02-25 22:07:43 +0000 | [diff] [blame] | 231 |    .. versionchanged:: 3.3 | 
 | 232 |       Added the *daemon* argument. | 
 | 233 |  | 
| Georg Brandl | 7a72b3a | 2009-07-26 14:48:09 +0000 | [diff] [blame] | 234 |    .. method:: start() | 
| Georg Brandl | a971c65 | 2008-11-07 09:39:56 +0000 | [diff] [blame] | 235 |  | 
| Georg Brandl | 7a72b3a | 2009-07-26 14:48:09 +0000 | [diff] [blame] | 236 |       Start the thread's activity. | 
| Georg Brandl | a971c65 | 2008-11-07 09:39:56 +0000 | [diff] [blame] | 237 |  | 
| Georg Brandl | 7a72b3a | 2009-07-26 14:48:09 +0000 | [diff] [blame] | 238 |       It must be called at most once per thread object.  It arranges for the | 
| Antoine Pitrou | 2c9f104 | 2012-04-10 22:35:53 +0200 | [diff] [blame] | 239 |       object's :meth:`~Thread.run` method to be invoked in a separate thread | 
 | 240 |       of control. | 
| Georg Brandl | a971c65 | 2008-11-07 09:39:56 +0000 | [diff] [blame] | 241 |  | 
| Brian Curtin | bd0c897 | 2011-01-31 19:35:02 +0000 | [diff] [blame] | 242 |       This method will raise a :exc:`RuntimeError` if called more than once | 
| Georg Brandl | 7a72b3a | 2009-07-26 14:48:09 +0000 | [diff] [blame] | 243 |       on the same thread object. | 
| Georg Brandl | a971c65 | 2008-11-07 09:39:56 +0000 | [diff] [blame] | 244 |  | 
| Georg Brandl | 7a72b3a | 2009-07-26 14:48:09 +0000 | [diff] [blame] | 245 |    .. method:: run() | 
| Georg Brandl | a971c65 | 2008-11-07 09:39:56 +0000 | [diff] [blame] | 246 |  | 
| Georg Brandl | 7a72b3a | 2009-07-26 14:48:09 +0000 | [diff] [blame] | 247 |       Method representing the thread's activity. | 
| Georg Brandl | a971c65 | 2008-11-07 09:39:56 +0000 | [diff] [blame] | 248 |  | 
| Georg Brandl | 7a72b3a | 2009-07-26 14:48:09 +0000 | [diff] [blame] | 249 |       You may override this method in a subclass.  The standard :meth:`run` | 
 | 250 |       method invokes the callable object passed to the object's constructor as | 
 | 251 |       the *target* argument, if any, with sequential and keyword arguments taken | 
 | 252 |       from the *args* and *kwargs* arguments, respectively. | 
| Georg Brandl | a971c65 | 2008-11-07 09:39:56 +0000 | [diff] [blame] | 253 |  | 
| Georg Brandl | 7f01a13 | 2009-09-16 15:58:14 +0000 | [diff] [blame] | 254 |    .. method:: join(timeout=None) | 
| Georg Brandl | a971c65 | 2008-11-07 09:39:56 +0000 | [diff] [blame] | 255 |  | 
| Antoine Pitrou | 2c9f104 | 2012-04-10 22:35:53 +0200 | [diff] [blame] | 256 |       Wait until the thread terminates. This blocks the calling thread until | 
 | 257 |       the thread whose :meth:`~Thread.join` method is called terminates -- either | 
 | 258 |       normally or through an unhandled exception --, or until the optional | 
 | 259 |       timeout occurs. | 
| Georg Brandl | a971c65 | 2008-11-07 09:39:56 +0000 | [diff] [blame] | 260 |  | 
| Georg Brandl | 7a72b3a | 2009-07-26 14:48:09 +0000 | [diff] [blame] | 261 |       When the *timeout* argument is present and not ``None``, it should be a | 
 | 262 |       floating point number specifying a timeout for the operation in seconds | 
| Antoine Pitrou | 2c9f104 | 2012-04-10 22:35:53 +0200 | [diff] [blame] | 263 |       (or fractions thereof). As :meth:`~Thread.join` always returns ``None``, | 
 | 264 |       you must call :meth:`~Thread.is_alive` after :meth:`~Thread.join` to | 
 | 265 |       decide whether a timeout happened -- if the thread is still alive, the | 
 | 266 |       :meth:`~Thread.join` call timed out. | 
| Georg Brandl | a971c65 | 2008-11-07 09:39:56 +0000 | [diff] [blame] | 267 |  | 
| Georg Brandl | 7a72b3a | 2009-07-26 14:48:09 +0000 | [diff] [blame] | 268 |       When the *timeout* argument is not present or ``None``, the operation will | 
 | 269 |       block until the thread terminates. | 
| Georg Brandl | a971c65 | 2008-11-07 09:39:56 +0000 | [diff] [blame] | 270 |  | 
| Antoine Pitrou | 2c9f104 | 2012-04-10 22:35:53 +0200 | [diff] [blame] | 271 |       A thread can be :meth:`~Thread.join`\ ed many times. | 
| Georg Brandl | a971c65 | 2008-11-07 09:39:56 +0000 | [diff] [blame] | 272 |  | 
| Antoine Pitrou | 2c9f104 | 2012-04-10 22:35:53 +0200 | [diff] [blame] | 273 |       :meth:`~Thread.join` raises a :exc:`RuntimeError` if an attempt is made | 
 | 274 |       to join the current thread as that would cause a deadlock. It is also | 
 | 275 |       an error to :meth:`~Thread.join` a thread before it has been started | 
 | 276 |       and attempts to do so raise the same exception. | 
| Georg Brandl | a971c65 | 2008-11-07 09:39:56 +0000 | [diff] [blame] | 277 |  | 
| Georg Brandl | 7a72b3a | 2009-07-26 14:48:09 +0000 | [diff] [blame] | 278 |    .. attribute:: name | 
| Georg Brandl | a971c65 | 2008-11-07 09:39:56 +0000 | [diff] [blame] | 279 |  | 
| Georg Brandl | 7a72b3a | 2009-07-26 14:48:09 +0000 | [diff] [blame] | 280 |       A string used for identification purposes only. It has no semantics. | 
 | 281 |       Multiple threads may be given the same name.  The initial name is set by | 
 | 282 |       the constructor. | 
| Georg Brandl | a971c65 | 2008-11-07 09:39:56 +0000 | [diff] [blame] | 283 |  | 
| Georg Brandl | 7a72b3a | 2009-07-26 14:48:09 +0000 | [diff] [blame] | 284 |    .. method:: getName() | 
 | 285 |                setName() | 
| Georg Brandl | a971c65 | 2008-11-07 09:39:56 +0000 | [diff] [blame] | 286 |  | 
| Georg Brandl | 7a72b3a | 2009-07-26 14:48:09 +0000 | [diff] [blame] | 287 |       Old getter/setter API for :attr:`~Thread.name`; use it directly as a | 
 | 288 |       property instead. | 
| Georg Brandl | a971c65 | 2008-11-07 09:39:56 +0000 | [diff] [blame] | 289 |  | 
| Georg Brandl | 7a72b3a | 2009-07-26 14:48:09 +0000 | [diff] [blame] | 290 |    .. attribute:: ident | 
| Georg Brandl | a971c65 | 2008-11-07 09:39:56 +0000 | [diff] [blame] | 291 |  | 
| Georg Brandl | 7a72b3a | 2009-07-26 14:48:09 +0000 | [diff] [blame] | 292 |       The 'thread identifier' of this thread or ``None`` if the thread has not | 
 | 293 |       been started.  This is a nonzero integer.  See the | 
| Antoine Pitrou | 2c9f104 | 2012-04-10 22:35:53 +0200 | [diff] [blame] | 294 |       :func:`_thread.get_ident()` function.  Thread identifiers may be recycled | 
| Georg Brandl | 7a72b3a | 2009-07-26 14:48:09 +0000 | [diff] [blame] | 295 |       when a thread exits and another thread is created.  The identifier is | 
 | 296 |       available even after the thread has exited. | 
| Georg Brandl | a971c65 | 2008-11-07 09:39:56 +0000 | [diff] [blame] | 297 |  | 
| Georg Brandl | 7a72b3a | 2009-07-26 14:48:09 +0000 | [diff] [blame] | 298 |    .. method:: is_alive() | 
| Georg Brandl | a971c65 | 2008-11-07 09:39:56 +0000 | [diff] [blame] | 299 |  | 
| Georg Brandl | 7a72b3a | 2009-07-26 14:48:09 +0000 | [diff] [blame] | 300 |       Return whether the thread is alive. | 
| Georg Brandl | 770b0be | 2009-01-02 20:10:05 +0000 | [diff] [blame] | 301 |  | 
| Antoine Pitrou | 2c9f104 | 2012-04-10 22:35:53 +0200 | [diff] [blame] | 302 |       This method returns ``True`` just before the :meth:`~Thread.run` method | 
 | 303 |       starts until just after the :meth:`~Thread.run` method terminates.  The | 
 | 304 |       module function :func:`.enumerate` returns a list of all alive threads. | 
| Georg Brandl | 770b0be | 2009-01-02 20:10:05 +0000 | [diff] [blame] | 305 |  | 
| Georg Brandl | 7a72b3a | 2009-07-26 14:48:09 +0000 | [diff] [blame] | 306 |    .. attribute:: daemon | 
| Georg Brandl | 770b0be | 2009-01-02 20:10:05 +0000 | [diff] [blame] | 307 |  | 
| Georg Brandl | 7a72b3a | 2009-07-26 14:48:09 +0000 | [diff] [blame] | 308 |       A boolean value indicating whether this thread is a daemon thread (True) | 
| Antoine Pitrou | 2c9f104 | 2012-04-10 22:35:53 +0200 | [diff] [blame] | 309 |       or not (False).  This must be set before :meth:`~Thread.start` is called, | 
| Georg Brandl | 7a72b3a | 2009-07-26 14:48:09 +0000 | [diff] [blame] | 310 |       otherwise :exc:`RuntimeError` is raised.  Its initial value is inherited | 
 | 311 |       from the creating thread; the main thread is not a daemon thread and | 
| Antoine Pitrou | 2c9f104 | 2012-04-10 22:35:53 +0200 | [diff] [blame] | 312 |       therefore all threads created in the main thread default to | 
 | 313 |       :attr:`~Thread.daemon` = ``False``. | 
| Georg Brandl | a971c65 | 2008-11-07 09:39:56 +0000 | [diff] [blame] | 314 |  | 
| Georg Brandl | 7a72b3a | 2009-07-26 14:48:09 +0000 | [diff] [blame] | 315 |       The entire Python program exits when no alive non-daemon threads are left. | 
| Georg Brandl | a971c65 | 2008-11-07 09:39:56 +0000 | [diff] [blame] | 316 |  | 
| Georg Brandl | 7a72b3a | 2009-07-26 14:48:09 +0000 | [diff] [blame] | 317 |    .. method:: isDaemon() | 
 | 318 |                setDaemon() | 
| Georg Brandl | a971c65 | 2008-11-07 09:39:56 +0000 | [diff] [blame] | 319 |  | 
| Georg Brandl | 7a72b3a | 2009-07-26 14:48:09 +0000 | [diff] [blame] | 320 |       Old getter/setter API for :attr:`~Thread.daemon`; use it directly as a | 
 | 321 |       property instead. | 
| Georg Brandl | 770b0be | 2009-01-02 20:10:05 +0000 | [diff] [blame] | 322 |  | 
 | 323 |  | 
| Antoine Pitrou | d6d17c5 | 2011-02-28 22:04:51 +0000 | [diff] [blame] | 324 | .. impl-detail:: | 
 | 325 |  | 
| Ezio Melotti | 6d043fc | 2013-01-18 19:58:47 +0200 | [diff] [blame] | 326 |    In CPython, due to the :term:`Global Interpreter Lock`, only one thread | 
| Antoine Pitrou | d6d17c5 | 2011-02-28 22:04:51 +0000 | [diff] [blame] | 327 |    can execute Python code at once (even though certain performance-oriented | 
 | 328 |    libraries might overcome this limitation). | 
| Ezio Melotti | 6d043fc | 2013-01-18 19:58:47 +0200 | [diff] [blame] | 329 |    If you want your application to make better use of the computational | 
| Antoine Pitrou | d6d17c5 | 2011-02-28 22:04:51 +0000 | [diff] [blame] | 330 |    resources of multi-core machines, you are advised to use | 
 | 331 |    :mod:`multiprocessing` or :class:`concurrent.futures.ProcessPoolExecutor`. | 
 | 332 |    However, threading is still an appropriate model if you want to run | 
 | 333 |    multiple I/O-bound tasks simultaneously. | 
 | 334 |  | 
 | 335 |  | 
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 336 | .. _lock-objects: | 
 | 337 |  | 
 | 338 | Lock Objects | 
 | 339 | ------------ | 
 | 340 |  | 
 | 341 | A primitive lock is a synchronization primitive that is not owned by a | 
 | 342 | particular thread when locked.  In Python, it is currently the lowest level | 
| Georg Brandl | 2067bfd | 2008-05-25 13:05:15 +0000 | [diff] [blame] | 343 | synchronization primitive available, implemented directly by the :mod:`_thread` | 
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 344 | extension module. | 
 | 345 |  | 
 | 346 | A primitive lock is in one of two states, "locked" or "unlocked". It is created | 
| Antoine Pitrou | 2c9f104 | 2012-04-10 22:35:53 +0200 | [diff] [blame] | 347 | in the unlocked state.  It has two basic methods, :meth:`~Lock.acquire` and | 
 | 348 | :meth:`~Lock.release`.  When the state is unlocked, :meth:`~Lock.acquire` | 
 | 349 | changes the state to locked and returns immediately.  When the state is locked, | 
 | 350 | :meth:`~Lock.acquire` blocks until a call to :meth:`~Lock.release` in another | 
 | 351 | thread changes it to unlocked, then the :meth:`~Lock.acquire` call resets it | 
 | 352 | to locked and returns.  The :meth:`~Lock.release` method should only be | 
 | 353 | called in the locked state; it changes the state to unlocked and returns | 
 | 354 | immediately. If an attempt is made to release an unlocked lock, a | 
 | 355 | :exc:`RuntimeError` will be raised. | 
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 356 |  | 
| Serhiy Storchaka | 1486799 | 2014-09-10 23:43:41 +0300 | [diff] [blame] | 357 | Locks also support the :ref:`context management protocol <with-locks>`. | 
| Antoine Pitrou | b96a354 | 2012-04-10 22:47:55 +0200 | [diff] [blame] | 358 |  | 
| Antoine Pitrou | 2c9f104 | 2012-04-10 22:35:53 +0200 | [diff] [blame] | 359 | When more than one thread is blocked in :meth:`~Lock.acquire` waiting for the | 
 | 360 | state to turn to unlocked, only one thread proceeds when a :meth:`~Lock.release` | 
 | 361 | call resets the state to unlocked; which one of the waiting threads proceeds | 
 | 362 | is not defined, and may vary across implementations. | 
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 363 |  | 
 | 364 | All methods are executed atomically. | 
 | 365 |  | 
 | 366 |  | 
| R David Murray | ef4d286 | 2012-10-06 14:35:35 -0400 | [diff] [blame] | 367 | .. class:: Lock() | 
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 368 |  | 
| R David Murray | ef4d286 | 2012-10-06 14:35:35 -0400 | [diff] [blame] | 369 |    The class implementing primitive lock objects.  Once a thread has acquired a | 
 | 370 |    lock, subsequent attempts to acquire it block, until it is released; any | 
 | 371 |    thread may release it. | 
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 372 |  | 
| R David Murray | ef4d286 | 2012-10-06 14:35:35 -0400 | [diff] [blame] | 373 |    .. versionchanged:: 3.3 | 
 | 374 |       Changed from a factory function to a class. | 
| Antoine Pitrou | 810023d | 2010-12-15 22:59:16 +0000 | [diff] [blame] | 375 |  | 
| Georg Brandl | 67b21b7 | 2010-08-17 15:07:14 +0000 | [diff] [blame] | 376 |  | 
| R David Murray | ef4d286 | 2012-10-06 14:35:35 -0400 | [diff] [blame] | 377 |    .. method:: acquire(blocking=True, timeout=-1) | 
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 378 |  | 
| R David Murray | ef4d286 | 2012-10-06 14:35:35 -0400 | [diff] [blame] | 379 |       Acquire a lock, blocking or non-blocking. | 
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 380 |  | 
| R David Murray | ef4d286 | 2012-10-06 14:35:35 -0400 | [diff] [blame] | 381 |       When invoked with the *blocking* argument set to ``True`` (the default), | 
 | 382 |       block until the lock is unlocked, then set it to locked and return ``True``. | 
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 383 |  | 
| R David Murray | ef4d286 | 2012-10-06 14:35:35 -0400 | [diff] [blame] | 384 |       When invoked with the *blocking* argument set to ``False``, do not block. | 
 | 385 |       If a call with *blocking* set to ``True`` would block, return ``False`` | 
 | 386 |       immediately; otherwise, set the lock to locked and return ``True``. | 
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 387 |  | 
| R David Murray | ef4d286 | 2012-10-06 14:35:35 -0400 | [diff] [blame] | 388 |       When invoked with the floating-point *timeout* argument set to a positive | 
 | 389 |       value, block for at most the number of seconds specified by *timeout* | 
| Georg Brandl | b19ef18 | 2013-10-06 10:48:08 +0200 | [diff] [blame] | 390 |       and as long as the lock cannot be acquired.  A *timeout* argument of ``-1`` | 
| R David Murray | ef4d286 | 2012-10-06 14:35:35 -0400 | [diff] [blame] | 391 |       specifies an unbounded wait.  It is forbidden to specify a *timeout* | 
 | 392 |       when *blocking* is false. | 
 | 393 |  | 
 | 394 |       The return value is ``True`` if the lock is acquired successfully, | 
 | 395 |       ``False`` if not (for example if the *timeout* expired). | 
 | 396 |  | 
 | 397 |       .. versionchanged:: 3.2 | 
 | 398 |          The *timeout* parameter is new. | 
 | 399 |  | 
 | 400 |       .. versionchanged:: 3.2 | 
 | 401 |          Lock acquires can now be interrupted by signals on POSIX. | 
 | 402 |  | 
 | 403 |  | 
 | 404 |    .. method:: release() | 
 | 405 |  | 
 | 406 |       Release a lock.  This can be called from any thread, not only the thread | 
 | 407 |       which has acquired the lock. | 
 | 408 |  | 
 | 409 |       When the lock is locked, reset it to unlocked, and return.  If any other threads | 
 | 410 |       are blocked waiting for the lock to become unlocked, allow exactly one of them | 
 | 411 |       to proceed. | 
 | 412 |  | 
 | 413 |       When invoked on an unlocked lock, a :exc:`RuntimeError` is raised. | 
 | 414 |  | 
 | 415 |       There is no return value. | 
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 416 |  | 
 | 417 |  | 
 | 418 | .. _rlock-objects: | 
 | 419 |  | 
 | 420 | RLock Objects | 
 | 421 | ------------- | 
 | 422 |  | 
 | 423 | A reentrant lock is a synchronization primitive that may be acquired multiple | 
 | 424 | times by the same thread.  Internally, it uses the concepts of "owning thread" | 
 | 425 | and "recursion level" in addition to the locked/unlocked state used by primitive | 
 | 426 | locks.  In the locked state, some thread owns the lock; in the unlocked state, | 
 | 427 | no thread owns it. | 
 | 428 |  | 
| Antoine Pitrou | 2c9f104 | 2012-04-10 22:35:53 +0200 | [diff] [blame] | 429 | To lock the lock, a thread calls its :meth:`~RLock.acquire` method; this | 
 | 430 | returns once the thread owns the lock.  To unlock the lock, a thread calls | 
 | 431 | its :meth:`~Lock.release` method. :meth:`~Lock.acquire`/:meth:`~Lock.release` | 
 | 432 | call pairs may be nested; only the final :meth:`~Lock.release` (the | 
 | 433 | :meth:`~Lock.release` of the outermost pair) resets the lock to unlocked and | 
 | 434 | allows another thread blocked in :meth:`~Lock.acquire` to proceed. | 
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 435 |  | 
| Serhiy Storchaka | 1486799 | 2014-09-10 23:43:41 +0300 | [diff] [blame] | 436 | Reentrant locks also support the :ref:`context management protocol <with-locks>`. | 
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 437 |  | 
 | 438 |  | 
| R David Murray | ef4d286 | 2012-10-06 14:35:35 -0400 | [diff] [blame] | 439 | .. class:: RLock() | 
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 440 |  | 
| R David Murray | ef4d286 | 2012-10-06 14:35:35 -0400 | [diff] [blame] | 441 |    This class implements reentrant lock objects.  A reentrant lock must be | 
 | 442 |    released by the thread that acquired it.  Once a thread has acquired a | 
 | 443 |    reentrant lock, the same thread may acquire it again without blocking; the | 
 | 444 |    thread must release it once for each time it has acquired it. | 
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 445 |  | 
| R David Murray | ef4d286 | 2012-10-06 14:35:35 -0400 | [diff] [blame] | 446 |    Note that ``RLock`` is actually a factory function which returns an instance | 
 | 447 |    of the most efficient version of the concrete RLock class that is supported | 
 | 448 |    by the platform. | 
| Antoine Pitrou | adbc009 | 2010-04-19 14:05:51 +0000 | [diff] [blame] | 449 |  | 
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 450 |  | 
| R David Murray | ef4d286 | 2012-10-06 14:35:35 -0400 | [diff] [blame] | 451 |    .. method:: acquire(blocking=True, timeout=-1) | 
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 452 |  | 
| R David Murray | ef4d286 | 2012-10-06 14:35:35 -0400 | [diff] [blame] | 453 |       Acquire a lock, blocking or non-blocking. | 
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 454 |  | 
| R David Murray | ef4d286 | 2012-10-06 14:35:35 -0400 | [diff] [blame] | 455 |       When invoked without arguments: if this thread already owns the lock, increment | 
 | 456 |       the recursion level by one, and return immediately.  Otherwise, if another | 
 | 457 |       thread owns the lock, block until the lock is unlocked.  Once the lock is | 
 | 458 |       unlocked (not owned by any thread), then grab ownership, set the recursion level | 
 | 459 |       to one, and return.  If more than one thread is blocked waiting until the lock | 
 | 460 |       is unlocked, only one at a time will be able to grab ownership of the lock. | 
 | 461 |       There is no return value in this case. | 
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 462 |  | 
| R David Murray | ef4d286 | 2012-10-06 14:35:35 -0400 | [diff] [blame] | 463 |       When invoked with the *blocking* argument set to true, do the same thing as when | 
 | 464 |       called without arguments, and return true. | 
 | 465 |  | 
 | 466 |       When invoked with the *blocking* argument set to false, do not block.  If a call | 
 | 467 |       without an argument would block, return false immediately; otherwise, do the | 
 | 468 |       same thing as when called without arguments, and return true. | 
 | 469 |  | 
 | 470 |       When invoked with the floating-point *timeout* argument set to a positive | 
 | 471 |       value, block for at most the number of seconds specified by *timeout* | 
 | 472 |       and as long as the lock cannot be acquired.  Return true if the lock has | 
 | 473 |       been acquired, false if the timeout has elapsed. | 
 | 474 |  | 
 | 475 |       .. versionchanged:: 3.2 | 
 | 476 |          The *timeout* parameter is new. | 
 | 477 |  | 
 | 478 |  | 
 | 479 |    .. method:: release() | 
 | 480 |  | 
 | 481 |       Release a lock, decrementing the recursion level.  If after the decrement it is | 
 | 482 |       zero, reset the lock to unlocked (not owned by any thread), and if any other | 
 | 483 |       threads are blocked waiting for the lock to become unlocked, allow exactly one | 
 | 484 |       of them to proceed.  If after the decrement the recursion level is still | 
 | 485 |       nonzero, the lock remains locked and owned by the calling thread. | 
 | 486 |  | 
 | 487 |       Only call this method when the calling thread owns the lock. A | 
 | 488 |       :exc:`RuntimeError` is raised if this method is called when the lock is | 
 | 489 |       unlocked. | 
 | 490 |  | 
 | 491 |       There is no return value. | 
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 492 |  | 
 | 493 |  | 
 | 494 | .. _condition-objects: | 
 | 495 |  | 
 | 496 | Condition Objects | 
 | 497 | ----------------- | 
 | 498 |  | 
 | 499 | A condition variable is always associated with some kind of lock; this can be | 
| Antoine Pitrou | 126aef7 | 2012-04-10 22:24:05 +0200 | [diff] [blame] | 500 | passed in or one will be created by default.  Passing one in is useful when | 
 | 501 | several condition variables must share the same lock.  The lock is part of | 
 | 502 | the condition object: you don't have to track it separately. | 
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 503 |  | 
| Serhiy Storchaka | 1486799 | 2014-09-10 23:43:41 +0300 | [diff] [blame] | 504 | A condition variable obeys the :ref:`context management protocol <with-locks>`: | 
| Antoine Pitrou | b96a354 | 2012-04-10 22:47:55 +0200 | [diff] [blame] | 505 | using the ``with`` statement acquires the associated lock for the duration of | 
 | 506 | the enclosed block.  The :meth:`~Condition.acquire` and | 
 | 507 | :meth:`~Condition.release` methods also call the corresponding methods of | 
 | 508 | the associated lock. | 
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 509 |  | 
| Antoine Pitrou | 126aef7 | 2012-04-10 22:24:05 +0200 | [diff] [blame] | 510 | Other methods must be called with the associated lock held.  The | 
 | 511 | :meth:`~Condition.wait` method releases the lock, and then blocks until | 
 | 512 | another thread awakens it by calling :meth:`~Condition.notify` or | 
 | 513 | :meth:`~Condition.notify_all`.  Once awakened, :meth:`~Condition.wait` | 
 | 514 | re-acquires the lock and returns.  It is also possible to specify a timeout. | 
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 515 |  | 
| Antoine Pitrou | 126aef7 | 2012-04-10 22:24:05 +0200 | [diff] [blame] | 516 | The :meth:`~Condition.notify` method wakes up one of the threads waiting for | 
 | 517 | the condition variable, if any are waiting.  The :meth:`~Condition.notify_all` | 
 | 518 | method wakes up all threads waiting for the condition variable. | 
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 519 |  | 
| Antoine Pitrou | 126aef7 | 2012-04-10 22:24:05 +0200 | [diff] [blame] | 520 | Note: the :meth:`~Condition.notify` and :meth:`~Condition.notify_all` methods | 
 | 521 | don't release the lock; this means that the thread or threads awakened will | 
 | 522 | not return from their :meth:`~Condition.wait` call immediately, but only when | 
 | 523 | the thread that called :meth:`~Condition.notify` or :meth:`~Condition.notify_all` | 
 | 524 | finally relinquishes ownership of the lock. | 
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 525 |  | 
| Antoine Pitrou | 126aef7 | 2012-04-10 22:24:05 +0200 | [diff] [blame] | 526 | The typical programming style using condition variables uses the lock to | 
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 527 | synchronize access to some shared state; threads that are interested in a | 
| Antoine Pitrou | 126aef7 | 2012-04-10 22:24:05 +0200 | [diff] [blame] | 528 | particular change of state call :meth:`~Condition.wait` repeatedly until they | 
 | 529 | see the desired state, while threads that modify the state call | 
 | 530 | :meth:`~Condition.notify` or :meth:`~Condition.notify_all` when they change | 
 | 531 | the state in such a way that it could possibly be a desired state for one | 
 | 532 | of the waiters.  For example, the following code is a generic | 
 | 533 | producer-consumer situation with unlimited buffer capacity:: | 
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 534 |  | 
 | 535 |    # Consume one item | 
| Antoine Pitrou | 126aef7 | 2012-04-10 22:24:05 +0200 | [diff] [blame] | 536 |    with cv: | 
 | 537 |        while not an_item_is_available(): | 
 | 538 |            cv.wait() | 
 | 539 |        get_an_available_item() | 
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 540 |  | 
 | 541 |    # Produce one item | 
| Antoine Pitrou | 126aef7 | 2012-04-10 22:24:05 +0200 | [diff] [blame] | 542 |    with cv: | 
 | 543 |        make_an_item_available() | 
| Antoine Pitrou | f6cd9b2 | 2012-04-11 19:37:56 +0200 | [diff] [blame] | 544 |        cv.notify() | 
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 545 |  | 
| Antoine Pitrou | 126aef7 | 2012-04-10 22:24:05 +0200 | [diff] [blame] | 546 | The ``while`` loop checking for the application's condition is necessary | 
 | 547 | because :meth:`~Condition.wait` can return after an arbitrary long time, | 
| Antoine Pitrou | f6cd9b2 | 2012-04-11 19:37:56 +0200 | [diff] [blame] | 548 | and the condition which prompted the :meth:`~Condition.notify` call may | 
 | 549 | no longer hold true.  This is inherent to multi-threaded programming.  The | 
 | 550 | :meth:`~Condition.wait_for` method can be used to automate the condition | 
 | 551 | checking, and eases the computation of timeouts:: | 
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 552 |  | 
| Antoine Pitrou | 126aef7 | 2012-04-10 22:24:05 +0200 | [diff] [blame] | 553 |    # Consume an item | 
 | 554 |    with cv: | 
 | 555 |        cv.wait_for(an_item_is_available) | 
 | 556 |        get_an_available_item() | 
| Kristján Valur Jónsson | 6331520 | 2010-11-18 12:46:39 +0000 | [diff] [blame] | 557 |  | 
| Antoine Pitrou | 126aef7 | 2012-04-10 22:24:05 +0200 | [diff] [blame] | 558 | To choose between :meth:`~Condition.notify` and :meth:`~Condition.notify_all`, | 
 | 559 | consider whether one state change can be interesting for only one or several | 
 | 560 | waiting threads.  E.g. in a typical producer-consumer situation, adding one | 
 | 561 | item to the buffer only needs to wake up one consumer thread. | 
 | 562 |  | 
 | 563 |  | 
| Georg Brandl | 7f01a13 | 2009-09-16 15:58:14 +0000 | [diff] [blame] | 564 | .. class:: Condition(lock=None) | 
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 565 |  | 
| R David Murray | ef4d286 | 2012-10-06 14:35:35 -0400 | [diff] [blame] | 566 |    This class implements condition variable objects.  A condition variable | 
 | 567 |    allows one or more threads to wait until they are notified by another thread. | 
 | 568 |  | 
| Georg Brandl | 7a72b3a | 2009-07-26 14:48:09 +0000 | [diff] [blame] | 569 |    If the *lock* argument is given and not ``None``, it must be a :class:`Lock` | 
 | 570 |    or :class:`RLock` object, and it is used as the underlying lock.  Otherwise, | 
 | 571 |    a new :class:`RLock` object is created and used as the underlying lock. | 
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 572 |  | 
| R David Murray | ef4d286 | 2012-10-06 14:35:35 -0400 | [diff] [blame] | 573 |    .. versionchanged:: 3.3 | 
 | 574 |       changed from a factory function to a class. | 
 | 575 |  | 
| Georg Brandl | 7a72b3a | 2009-07-26 14:48:09 +0000 | [diff] [blame] | 576 |    .. method:: acquire(*args) | 
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 577 |  | 
| Georg Brandl | 7a72b3a | 2009-07-26 14:48:09 +0000 | [diff] [blame] | 578 |       Acquire the underlying lock. This method calls the corresponding method on | 
 | 579 |       the underlying lock; the return value is whatever that method returns. | 
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 580 |  | 
| Georg Brandl | 7a72b3a | 2009-07-26 14:48:09 +0000 | [diff] [blame] | 581 |    .. method:: release() | 
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 582 |  | 
| Georg Brandl | 7a72b3a | 2009-07-26 14:48:09 +0000 | [diff] [blame] | 583 |       Release the underlying lock. This method calls the corresponding method on | 
 | 584 |       the underlying lock; there is no return value. | 
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 585 |  | 
| Georg Brandl | 7f01a13 | 2009-09-16 15:58:14 +0000 | [diff] [blame] | 586 |    .. method:: wait(timeout=None) | 
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 587 |  | 
| Georg Brandl | 7a72b3a | 2009-07-26 14:48:09 +0000 | [diff] [blame] | 588 |       Wait until notified or until a timeout occurs. If the calling thread has | 
 | 589 |       not acquired the lock when this method is called, a :exc:`RuntimeError` is | 
 | 590 |       raised. | 
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 591 |  | 
| Georg Brandl | 7a72b3a | 2009-07-26 14:48:09 +0000 | [diff] [blame] | 592 |       This method releases the underlying lock, and then blocks until it is | 
 | 593 |       awakened by a :meth:`notify` or :meth:`notify_all` call for the same | 
 | 594 |       condition variable in another thread, or until the optional timeout | 
 | 595 |       occurs.  Once awakened or timed out, it re-acquires the lock and returns. | 
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 596 |  | 
| Georg Brandl | 7a72b3a | 2009-07-26 14:48:09 +0000 | [diff] [blame] | 597 |       When the *timeout* argument is present and not ``None``, it should be a | 
 | 598 |       floating point number specifying a timeout for the operation in seconds | 
 | 599 |       (or fractions thereof). | 
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 600 |  | 
| Georg Brandl | 7a72b3a | 2009-07-26 14:48:09 +0000 | [diff] [blame] | 601 |       When the underlying lock is an :class:`RLock`, it is not released using | 
 | 602 |       its :meth:`release` method, since this may not actually unlock the lock | 
 | 603 |       when it was acquired multiple times recursively.  Instead, an internal | 
 | 604 |       interface of the :class:`RLock` class is used, which really unlocks it | 
 | 605 |       even when it has been recursively acquired several times. Another internal | 
 | 606 |       interface is then used to restore the recursion level when the lock is | 
 | 607 |       reacquired. | 
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 608 |  | 
| Georg Brandl | b9a4391 | 2010-10-28 09:03:20 +0000 | [diff] [blame] | 609 |       The return value is ``True`` unless a given *timeout* expired, in which | 
 | 610 |       case it is ``False``. | 
 | 611 |  | 
 | 612 |       .. versionchanged:: 3.2 | 
 | 613 |          Previously, the method always returned ``None``. | 
 | 614 |  | 
| Kristján Valur Jónsson | 6331520 | 2010-11-18 12:46:39 +0000 | [diff] [blame] | 615 |    .. method:: wait_for(predicate, timeout=None) | 
 | 616 |  | 
 | 617 |       Wait until a condition evaluates to True.  *predicate* should be a | 
 | 618 |       callable which result will be interpreted as a boolean value. | 
 | 619 |       A *timeout* may be provided giving the maximum time to wait. | 
 | 620 |  | 
 | 621 |       This utility method may call :meth:`wait` repeatedly until the predicate | 
 | 622 |       is satisfied, or until a timeout occurs. The return value is | 
 | 623 |       the last return value of the predicate and will evaluate to | 
 | 624 |       ``False`` if the method timed out. | 
 | 625 |  | 
 | 626 |       Ignoring the timeout feature, calling this method is roughly equivalent to | 
 | 627 |       writing:: | 
 | 628 |  | 
 | 629 |         while not predicate(): | 
 | 630 |             cv.wait() | 
 | 631 |  | 
 | 632 |       Therefore, the same rules apply as with :meth:`wait`: The lock must be | 
| Donald Stufft | 8b852f1 | 2014-05-20 12:58:38 -0400 | [diff] [blame] | 633 |       held when called and is re-acquired on return.  The predicate is evaluated | 
| Kristján Valur Jónsson | 6331520 | 2010-11-18 12:46:39 +0000 | [diff] [blame] | 634 |       with the lock held. | 
 | 635 |  | 
| Kristján Valur Jónsson | 6331520 | 2010-11-18 12:46:39 +0000 | [diff] [blame] | 636 |       .. versionadded:: 3.2 | 
 | 637 |  | 
| Eli Bendersky | d44af82 | 2011-11-12 20:44:25 +0200 | [diff] [blame] | 638 |    .. method:: notify(n=1) | 
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 639 |  | 
| Eli Bendersky | d44af82 | 2011-11-12 20:44:25 +0200 | [diff] [blame] | 640 |       By default, wake up one thread waiting on this condition, if any.  If the | 
 | 641 |       calling thread has not acquired the lock when this method is called, a | 
| Georg Brandl | 7a72b3a | 2009-07-26 14:48:09 +0000 | [diff] [blame] | 642 |       :exc:`RuntimeError` is raised. | 
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 643 |  | 
| Eli Bendersky | d44af82 | 2011-11-12 20:44:25 +0200 | [diff] [blame] | 644 |       This method wakes up at most *n* of the threads waiting for the condition | 
 | 645 |       variable; it is a no-op if no threads are waiting. | 
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 646 |  | 
| Eli Bendersky | d44af82 | 2011-11-12 20:44:25 +0200 | [diff] [blame] | 647 |       The current implementation wakes up exactly *n* threads, if at least *n* | 
 | 648 |       threads are waiting.  However, it's not safe to rely on this behavior. | 
 | 649 |       A future, optimized implementation may occasionally wake up more than | 
 | 650 |       *n* threads. | 
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 651 |  | 
| Eli Bendersky | d44af82 | 2011-11-12 20:44:25 +0200 | [diff] [blame] | 652 |       Note: an awakened thread does not actually return from its :meth:`wait` | 
| Georg Brandl | 7a72b3a | 2009-07-26 14:48:09 +0000 | [diff] [blame] | 653 |       call until it can reacquire the lock.  Since :meth:`notify` does not | 
 | 654 |       release the lock, its caller should. | 
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 655 |  | 
| Georg Brandl | 7a72b3a | 2009-07-26 14:48:09 +0000 | [diff] [blame] | 656 |    .. method:: notify_all() | 
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 657 |  | 
| Georg Brandl | 7a72b3a | 2009-07-26 14:48:09 +0000 | [diff] [blame] | 658 |       Wake up all threads waiting on this condition.  This method acts like | 
 | 659 |       :meth:`notify`, but wakes up all waiting threads instead of one. If the | 
 | 660 |       calling thread has not acquired the lock when this method is called, a | 
 | 661 |       :exc:`RuntimeError` is raised. | 
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 662 |  | 
 | 663 |  | 
 | 664 | .. _semaphore-objects: | 
 | 665 |  | 
 | 666 | Semaphore Objects | 
 | 667 | ----------------- | 
 | 668 |  | 
 | 669 | This is one of the oldest synchronization primitives in the history of computer | 
 | 670 | science, invented by the early Dutch computer scientist Edsger W. Dijkstra (he | 
| Antoine Pitrou | 2c9f104 | 2012-04-10 22:35:53 +0200 | [diff] [blame] | 671 | used the names ``P()`` and ``V()`` instead of :meth:`~Semaphore.acquire` and | 
 | 672 | :meth:`~Semaphore.release`). | 
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 673 |  | 
 | 674 | A semaphore manages an internal counter which is decremented by each | 
| Antoine Pitrou | 2c9f104 | 2012-04-10 22:35:53 +0200 | [diff] [blame] | 675 | :meth:`~Semaphore.acquire` call and incremented by each :meth:`~Semaphore.release` | 
 | 676 | call.  The counter can never go below zero; when :meth:`~Semaphore.acquire` | 
 | 677 | finds that it is zero, it blocks, waiting until some other thread calls | 
 | 678 | :meth:`~Semaphore.release`. | 
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 679 |  | 
| Serhiy Storchaka | 1486799 | 2014-09-10 23:43:41 +0300 | [diff] [blame] | 680 | Semaphores also support the :ref:`context management protocol <with-locks>`. | 
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 681 |  | 
 | 682 |  | 
| Georg Brandl | 7f01a13 | 2009-09-16 15:58:14 +0000 | [diff] [blame] | 683 | .. class:: Semaphore(value=1) | 
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 684 |  | 
| R David Murray | ef4d286 | 2012-10-06 14:35:35 -0400 | [diff] [blame] | 685 |    This class implements semaphore objects.  A semaphore manages a counter | 
 | 686 |    representing the number of :meth:`release` calls minus the number of | 
 | 687 |    :meth:`acquire` calls, plus an initial value.  The :meth:`acquire` method | 
 | 688 |    blocks if necessary until it can return without making the counter negative. | 
 | 689 |    If not given, *value* defaults to 1. | 
 | 690 |  | 
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 691 |    The optional argument gives the initial *value* for the internal counter; it | 
 | 692 |    defaults to ``1``. If the *value* given is less than 0, :exc:`ValueError` is | 
 | 693 |    raised. | 
 | 694 |  | 
| R David Murray | ef4d286 | 2012-10-06 14:35:35 -0400 | [diff] [blame] | 695 |    .. versionchanged:: 3.3 | 
 | 696 |       changed from a factory function to a class. | 
 | 697 |  | 
| Antoine Pitrou | 0454af9 | 2010-04-17 23:51:58 +0000 | [diff] [blame] | 698 |    .. method:: acquire(blocking=True, timeout=None) | 
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 699 |  | 
| Georg Brandl | 7a72b3a | 2009-07-26 14:48:09 +0000 | [diff] [blame] | 700 |       Acquire a semaphore. | 
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 701 |  | 
| Georg Brandl | 7a72b3a | 2009-07-26 14:48:09 +0000 | [diff] [blame] | 702 |       When invoked without arguments: if the internal counter is larger than | 
 | 703 |       zero on entry, decrement it by one and return immediately.  If it is zero | 
 | 704 |       on entry, block, waiting until some other thread has called | 
| Antoine Pitrou | 2c9f104 | 2012-04-10 22:35:53 +0200 | [diff] [blame] | 705 |       :meth:`~Semaphore.release` to make it larger than zero.  This is done | 
 | 706 |       with proper interlocking so that if multiple :meth:`acquire` calls are | 
 | 707 |       blocked, :meth:`~Semaphore.release` will wake exactly one of them up. | 
 | 708 |       The implementation may pick one at random, so the order in which | 
 | 709 |       blocked threads are awakened should not be relied on.  Returns | 
 | 710 |       true (or blocks indefinitely). | 
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 711 |  | 
| Georg Brandl | 7a72b3a | 2009-07-26 14:48:09 +0000 | [diff] [blame] | 712 |       When invoked with *blocking* set to false, do not block.  If a call | 
| Antoine Pitrou | 0454af9 | 2010-04-17 23:51:58 +0000 | [diff] [blame] | 713 |       without an argument would block, return false immediately; otherwise, | 
 | 714 |       do the same thing as when called without arguments, and return true. | 
 | 715 |  | 
 | 716 |       When invoked with a *timeout* other than None, it will block for at | 
 | 717 |       most *timeout* seconds.  If acquire does not complete successfully in | 
 | 718 |       that interval, return false.  Return true otherwise. | 
 | 719 |  | 
 | 720 |       .. versionchanged:: 3.2 | 
 | 721 |          The *timeout* parameter is new. | 
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 722 |  | 
| Georg Brandl | 7a72b3a | 2009-07-26 14:48:09 +0000 | [diff] [blame] | 723 |    .. method:: release() | 
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 724 |  | 
| Georg Brandl | 7a72b3a | 2009-07-26 14:48:09 +0000 | [diff] [blame] | 725 |       Release a semaphore, incrementing the internal counter by one.  When it | 
 | 726 |       was zero on entry and another thread is waiting for it to become larger | 
 | 727 |       than zero again, wake up that thread. | 
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 728 |  | 
 | 729 |  | 
| R David Murray | ef4d286 | 2012-10-06 14:35:35 -0400 | [diff] [blame] | 730 | .. class:: BoundedSemaphore(value=1) | 
 | 731 |  | 
 | 732 |    Class implementing bounded semaphore objects.  A bounded semaphore checks to | 
 | 733 |    make sure its current value doesn't exceed its initial value.  If it does, | 
 | 734 |    :exc:`ValueError` is raised. In most situations semaphores are used to guard | 
 | 735 |    resources with limited capacity.  If the semaphore is released too many times | 
 | 736 |    it's a sign of a bug.  If not given, *value* defaults to 1. | 
 | 737 |  | 
 | 738 |    .. versionchanged:: 3.3 | 
 | 739 |       changed from a factory function to a class. | 
 | 740 |  | 
 | 741 |  | 
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 742 | .. _semaphore-examples: | 
 | 743 |  | 
 | 744 | :class:`Semaphore` Example | 
 | 745 | ^^^^^^^^^^^^^^^^^^^^^^^^^^ | 
 | 746 |  | 
 | 747 | Semaphores are often used to guard resources with limited capacity, for example, | 
| Georg Brandl | a572476 | 2011-01-06 19:28:18 +0000 | [diff] [blame] | 748 | a database server.  In any situation where the size of the resource is fixed, | 
 | 749 | you should use a bounded semaphore.  Before spawning any worker threads, your | 
 | 750 | main thread would initialize the semaphore:: | 
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 751 |  | 
 | 752 |    maxconnections = 5 | 
| R David Murray | ef4d286 | 2012-10-06 14:35:35 -0400 | [diff] [blame] | 753 |    # ... | 
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 754 |    pool_sema = BoundedSemaphore(value=maxconnections) | 
 | 755 |  | 
 | 756 | Once spawned, worker threads call the semaphore's acquire and release methods | 
 | 757 | when they need to connect to the server:: | 
 | 758 |  | 
| Antoine Pitrou | b96a354 | 2012-04-10 22:47:55 +0200 | [diff] [blame] | 759 |    with pool_sema: | 
 | 760 |        conn = connectdb() | 
 | 761 |        try: | 
| R David Murray | ef4d286 | 2012-10-06 14:35:35 -0400 | [diff] [blame] | 762 |            # ... use connection ... | 
| Antoine Pitrou | b96a354 | 2012-04-10 22:47:55 +0200 | [diff] [blame] | 763 |        finally: | 
 | 764 |            conn.close() | 
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 765 |  | 
 | 766 | The use of a bounded semaphore reduces the chance that a programming error which | 
 | 767 | causes the semaphore to be released more than it's acquired will go undetected. | 
 | 768 |  | 
 | 769 |  | 
 | 770 | .. _event-objects: | 
 | 771 |  | 
 | 772 | Event Objects | 
 | 773 | ------------- | 
 | 774 |  | 
 | 775 | This is one of the simplest mechanisms for communication between threads: one | 
 | 776 | thread signals an event and other threads wait for it. | 
 | 777 |  | 
 | 778 | An event object manages an internal flag that can be set to true with the | 
| Antoine Pitrou | 2c9f104 | 2012-04-10 22:35:53 +0200 | [diff] [blame] | 779 | :meth:`~Event.set` method and reset to false with the :meth:`~Event.clear` | 
 | 780 | method.  The :meth:`~Event.wait` method blocks until the flag is true. | 
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 781 |  | 
 | 782 |  | 
 | 783 | .. class:: Event() | 
 | 784 |  | 
| R David Murray | ef4d286 | 2012-10-06 14:35:35 -0400 | [diff] [blame] | 785 |    Class implementing event objects.  An event manages a flag that can be set to | 
 | 786 |    true with the :meth:`~Event.set` method and reset to false with the | 
 | 787 |    :meth:`clear` method.  The :meth:`wait` method blocks until the flag is true. | 
 | 788 |    The flag is initially false. | 
 | 789 |  | 
 | 790 |    .. versionchanged:: 3.3 | 
 | 791 |       changed from a factory function to a class. | 
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 792 |  | 
| Georg Brandl | 7a72b3a | 2009-07-26 14:48:09 +0000 | [diff] [blame] | 793 |    .. method:: is_set() | 
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 794 |  | 
| Georg Brandl | 7a72b3a | 2009-07-26 14:48:09 +0000 | [diff] [blame] | 795 |       Return true if and only if the internal flag is true. | 
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 796 |  | 
| Georg Brandl | 7a72b3a | 2009-07-26 14:48:09 +0000 | [diff] [blame] | 797 |    .. method:: set() | 
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 798 |  | 
| Georg Brandl | 7a72b3a | 2009-07-26 14:48:09 +0000 | [diff] [blame] | 799 |       Set the internal flag to true. All threads waiting for it to become true | 
 | 800 |       are awakened. Threads that call :meth:`wait` once the flag is true will | 
 | 801 |       not block at all. | 
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 802 |  | 
| Georg Brandl | 7a72b3a | 2009-07-26 14:48:09 +0000 | [diff] [blame] | 803 |    .. method:: clear() | 
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 804 |  | 
| Georg Brandl | 7a72b3a | 2009-07-26 14:48:09 +0000 | [diff] [blame] | 805 |       Reset the internal flag to false. Subsequently, threads calling | 
| Georg Brandl | 502d9a5 | 2009-07-26 15:02:41 +0000 | [diff] [blame] | 806 |       :meth:`wait` will block until :meth:`.set` is called to set the internal | 
| Georg Brandl | 7a72b3a | 2009-07-26 14:48:09 +0000 | [diff] [blame] | 807 |       flag to true again. | 
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 808 |  | 
| Georg Brandl | 7f01a13 | 2009-09-16 15:58:14 +0000 | [diff] [blame] | 809 |    .. method:: wait(timeout=None) | 
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 810 |  | 
| Georg Brandl | 7a72b3a | 2009-07-26 14:48:09 +0000 | [diff] [blame] | 811 |       Block until the internal flag is true.  If the internal flag is true on | 
 | 812 |       entry, return immediately.  Otherwise, block until another thread calls | 
| Antoine Pitrou | 2c9f104 | 2012-04-10 22:35:53 +0200 | [diff] [blame] | 813 |       :meth:`.set` to set the flag to true, or until the optional timeout occurs. | 
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 814 |  | 
| Georg Brandl | 7a72b3a | 2009-07-26 14:48:09 +0000 | [diff] [blame] | 815 |       When the timeout argument is present and not ``None``, it should be a | 
 | 816 |       floating point number specifying a timeout for the operation in seconds | 
 | 817 |       (or fractions thereof). | 
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 818 |  | 
| Charles-François Natali | ded0348 | 2012-01-07 18:24:56 +0100 | [diff] [blame] | 819 |       This method returns true if and only if the internal flag has been set to | 
 | 820 |       true, either before the wait call or after the wait starts, so it will | 
 | 821 |       always return ``True`` except if a timeout is given and the operation | 
 | 822 |       times out. | 
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 823 |  | 
| Georg Brandl | 7a72b3a | 2009-07-26 14:48:09 +0000 | [diff] [blame] | 824 |       .. versionchanged:: 3.1 | 
 | 825 |          Previously, the method always returned ``None``. | 
| Benjamin Peterson | d23f822 | 2009-04-05 19:13:16 +0000 | [diff] [blame] | 826 |  | 
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 827 |  | 
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 828 | .. _timer-objects: | 
 | 829 |  | 
 | 830 | Timer Objects | 
 | 831 | ------------- | 
 | 832 |  | 
 | 833 | This class represents an action that should be run only after a certain amount | 
 | 834 | of time has passed --- a timer.  :class:`Timer` is a subclass of :class:`Thread` | 
 | 835 | and as such also functions as an example of creating custom threads. | 
 | 836 |  | 
| Serhiy Storchaka | 9e0ae53 | 2013-08-24 00:23:38 +0300 | [diff] [blame] | 837 | Timers are started, as with threads, by calling their :meth:`~Timer.start` | 
 | 838 | method.  The timer can be stopped (before its action has begun) by calling the | 
 | 839 | :meth:`~Timer.cancel` method.  The interval the timer will wait before | 
 | 840 | executing its action may not be exactly the same as the interval specified by | 
 | 841 | the user. | 
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 842 |  | 
 | 843 | For example:: | 
 | 844 |  | 
 | 845 |    def hello(): | 
| Collin Winter | c79461b | 2007-09-01 23:34:30 +0000 | [diff] [blame] | 846 |        print("hello, world") | 
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 847 |  | 
 | 848 |    t = Timer(30.0, hello) | 
 | 849 |    t.start() # after 30 seconds, "hello, world" will be printed | 
 | 850 |  | 
 | 851 |  | 
| R David Murray | 19aeb43 | 2013-03-30 17:19:38 -0400 | [diff] [blame] | 852 | .. class:: Timer(interval, function, args=None, kwargs=None) | 
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 853 |  | 
 | 854 |    Create a timer that will run *function* with arguments *args* and  keyword | 
 | 855 |    arguments *kwargs*, after *interval* seconds have passed. | 
| R David Murray | 19aeb43 | 2013-03-30 17:19:38 -0400 | [diff] [blame] | 856 |    If *args* is None (the default) then an empty list will be used. | 
 | 857 |    If *kwargs* is None (the default) then an empty dict will be used. | 
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 858 |  | 
| R David Murray | ef4d286 | 2012-10-06 14:35:35 -0400 | [diff] [blame] | 859 |    .. versionchanged:: 3.3 | 
 | 860 |       changed from a factory function to a class. | 
 | 861 |  | 
| Georg Brandl | 7a72b3a | 2009-07-26 14:48:09 +0000 | [diff] [blame] | 862 |    .. method:: cancel() | 
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 863 |  | 
| Georg Brandl | 7a72b3a | 2009-07-26 14:48:09 +0000 | [diff] [blame] | 864 |       Stop the timer, and cancel the execution of the timer's action.  This will | 
 | 865 |       only work if the timer is still in its waiting stage. | 
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 866 |  | 
 | 867 |  | 
| Kristján Valur Jónsson | 3be0003 | 2010-10-28 09:43:10 +0000 | [diff] [blame] | 868 | Barrier Objects | 
 | 869 | --------------- | 
 | 870 |  | 
| Georg Brandl | 5bc1686 | 2010-10-28 13:07:50 +0000 | [diff] [blame] | 871 | .. versionadded:: 3.2 | 
 | 872 |  | 
 | 873 | This class provides a simple synchronization primitive for use by a fixed number | 
 | 874 | of threads that need to wait for each other.  Each of the threads tries to pass | 
| Antoine Pitrou | 2c9f104 | 2012-04-10 22:35:53 +0200 | [diff] [blame] | 875 | the barrier by calling the :meth:`~Barrier.wait` method and will block until | 
 | 876 | all of the threads have made the call.  At this points, the threads are released | 
| Georg Brandl | 5bc1686 | 2010-10-28 13:07:50 +0000 | [diff] [blame] | 877 | simultanously. | 
| Kristján Valur Jónsson | 3be0003 | 2010-10-28 09:43:10 +0000 | [diff] [blame] | 878 |  | 
 | 879 | The barrier can be reused any number of times for the same number of threads. | 
 | 880 |  | 
 | 881 | As an example, here is a simple way to synchronize a client and server thread:: | 
 | 882 |  | 
 | 883 |    b = Barrier(2, timeout=5) | 
| Georg Brandl | 5bc1686 | 2010-10-28 13:07:50 +0000 | [diff] [blame] | 884 |  | 
 | 885 |    def server(): | 
| Kristján Valur Jónsson | 3be0003 | 2010-10-28 09:43:10 +0000 | [diff] [blame] | 886 |        start_server() | 
 | 887 |        b.wait() | 
 | 888 |        while True: | 
 | 889 |            connection = accept_connection() | 
 | 890 |            process_server_connection(connection) | 
 | 891 |  | 
| Georg Brandl | 5bc1686 | 2010-10-28 13:07:50 +0000 | [diff] [blame] | 892 |    def client(): | 
| Kristján Valur Jónsson | 3be0003 | 2010-10-28 09:43:10 +0000 | [diff] [blame] | 893 |        b.wait() | 
 | 894 |        while True: | 
| Georg Brandl | 5bc1686 | 2010-10-28 13:07:50 +0000 | [diff] [blame] | 895 |            connection = make_connection() | 
 | 896 |            process_client_connection(connection) | 
 | 897 |  | 
| Kristján Valur Jónsson | 3be0003 | 2010-10-28 09:43:10 +0000 | [diff] [blame] | 898 |  | 
 | 899 | .. class:: Barrier(parties, action=None, timeout=None) | 
 | 900 |  | 
| Georg Brandl | 5bc1686 | 2010-10-28 13:07:50 +0000 | [diff] [blame] | 901 |    Create a barrier object for *parties* number of threads.  An *action*, when | 
 | 902 |    provided, is a callable to be called by one of the threads when they are | 
 | 903 |    released.  *timeout* is the default timeout value if none is specified for | 
 | 904 |    the :meth:`wait` method. | 
| Kristján Valur Jónsson | 3be0003 | 2010-10-28 09:43:10 +0000 | [diff] [blame] | 905 |  | 
 | 906 |    .. method:: wait(timeout=None) | 
 | 907 |  | 
 | 908 |       Pass the barrier.  When all the threads party to the barrier have called | 
| Georg Brandl | 5bc1686 | 2010-10-28 13:07:50 +0000 | [diff] [blame] | 909 |       this function, they are all released simultaneously.  If a *timeout* is | 
| Ezio Melotti | e130a52 | 2011-10-19 10:58:56 +0300 | [diff] [blame] | 910 |       provided, it is used in preference to any that was supplied to the class | 
| Georg Brandl | 5bc1686 | 2010-10-28 13:07:50 +0000 | [diff] [blame] | 911 |       constructor. | 
| Kristján Valur Jónsson | 3be0003 | 2010-10-28 09:43:10 +0000 | [diff] [blame] | 912 |  | 
| Georg Brandl | 5bc1686 | 2010-10-28 13:07:50 +0000 | [diff] [blame] | 913 |       The return value is an integer in the range 0 to *parties* -- 1, different | 
| Raymond Hettinger | 5cee47f | 2011-01-11 19:59:46 +0000 | [diff] [blame] | 914 |       for each thread.  This can be used to select a thread to do some special | 
| Georg Brandl | 5bc1686 | 2010-10-28 13:07:50 +0000 | [diff] [blame] | 915 |       housekeeping, e.g.:: | 
| Kristján Valur Jónsson | 3be0003 | 2010-10-28 09:43:10 +0000 | [diff] [blame] | 916 |  | 
 | 917 |          i = barrier.wait() | 
 | 918 |          if i == 0: | 
| Georg Brandl | 5bc1686 | 2010-10-28 13:07:50 +0000 | [diff] [blame] | 919 |              # Only one thread needs to print this | 
 | 920 |              print("passed the barrier") | 
| Kristján Valur Jónsson | 3be0003 | 2010-10-28 09:43:10 +0000 | [diff] [blame] | 921 |  | 
| Georg Brandl | 5bc1686 | 2010-10-28 13:07:50 +0000 | [diff] [blame] | 922 |       If an *action* was provided to the constructor, one of the threads will | 
 | 923 |       have called it prior to being released.  Should this call raise an error, | 
 | 924 |       the barrier is put into the broken state. | 
| Kristján Valur Jónsson | 3be0003 | 2010-10-28 09:43:10 +0000 | [diff] [blame] | 925 |  | 
 | 926 |       If the call times out, the barrier is put into the broken state. | 
 | 927 |  | 
 | 928 |       This method may raise a :class:`BrokenBarrierError` exception if the | 
| Georg Brandl | 5bc1686 | 2010-10-28 13:07:50 +0000 | [diff] [blame] | 929 |       barrier is broken or reset while a thread is waiting. | 
| Kristján Valur Jónsson | 3be0003 | 2010-10-28 09:43:10 +0000 | [diff] [blame] | 930 |  | 
 | 931 |    .. method:: reset() | 
 | 932 |  | 
| Georg Brandl | 5bc1686 | 2010-10-28 13:07:50 +0000 | [diff] [blame] | 933 |       Return the barrier to the default, empty state.  Any threads waiting on it | 
 | 934 |       will receive the :class:`BrokenBarrierError` exception. | 
| Kristján Valur Jónsson | 3be0003 | 2010-10-28 09:43:10 +0000 | [diff] [blame] | 935 |  | 
 | 936 |       Note that using this function may can require some external | 
| Georg Brandl | 5bc1686 | 2010-10-28 13:07:50 +0000 | [diff] [blame] | 937 |       synchronization if there are other threads whose state is unknown.  If a | 
 | 938 |       barrier is broken it may be better to just leave it and create a new one. | 
| Kristján Valur Jónsson | 3be0003 | 2010-10-28 09:43:10 +0000 | [diff] [blame] | 939 |  | 
 | 940 |    .. method:: abort() | 
 | 941 |  | 
 | 942 |       Put the barrier into a broken state.  This causes any active or future | 
| Georg Brandl | 5bc1686 | 2010-10-28 13:07:50 +0000 | [diff] [blame] | 943 |       calls to :meth:`wait` to fail with the :class:`BrokenBarrierError`.  Use | 
 | 944 |       this for example if one of the needs to abort, to avoid deadlocking the | 
 | 945 |       application. | 
| Kristján Valur Jónsson | 3be0003 | 2010-10-28 09:43:10 +0000 | [diff] [blame] | 946 |  | 
 | 947 |       It may be preferable to simply create the barrier with a sensible | 
| Georg Brandl | 5bc1686 | 2010-10-28 13:07:50 +0000 | [diff] [blame] | 948 |       *timeout* value to automatically guard against one of the threads going | 
 | 949 |       awry. | 
| Kristján Valur Jónsson | 3be0003 | 2010-10-28 09:43:10 +0000 | [diff] [blame] | 950 |  | 
 | 951 |    .. attribute:: parties | 
 | 952 |  | 
 | 953 |       The number of threads required to pass the barrier. | 
 | 954 |  | 
 | 955 |    .. attribute:: n_waiting | 
 | 956 |  | 
 | 957 |       The number of threads currently waiting in the barrier. | 
 | 958 |  | 
 | 959 |    .. attribute:: broken | 
 | 960 |  | 
 | 961 |       A boolean that is ``True`` if the barrier is in the broken state. | 
 | 962 |  | 
| Kristján Valur Jónsson | 3be0003 | 2010-10-28 09:43:10 +0000 | [diff] [blame] | 963 |  | 
| Georg Brandl | 5bc1686 | 2010-10-28 13:07:50 +0000 | [diff] [blame] | 964 | .. exception:: BrokenBarrierError | 
| Kristján Valur Jónsson | 3be0003 | 2010-10-28 09:43:10 +0000 | [diff] [blame] | 965 |  | 
| Georg Brandl | 5bc1686 | 2010-10-28 13:07:50 +0000 | [diff] [blame] | 966 |    This exception, a subclass of :exc:`RuntimeError`, is raised when the | 
 | 967 |    :class:`Barrier` object is reset or broken. | 
| Kristján Valur Jónsson | 3be0003 | 2010-10-28 09:43:10 +0000 | [diff] [blame] | 968 |  | 
 | 969 |  | 
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 970 | .. _with-locks: | 
 | 971 |  | 
 | 972 | Using locks, conditions, and semaphores in the :keyword:`with` statement | 
 | 973 | ------------------------------------------------------------------------ | 
 | 974 |  | 
 | 975 | All of the objects provided by this module that have :meth:`acquire` and | 
 | 976 | :meth:`release` methods can be used as context managers for a :keyword:`with` | 
| Antoine Pitrou | b96a354 | 2012-04-10 22:47:55 +0200 | [diff] [blame] | 977 | statement.  The :meth:`acquire` method will be called when the block is | 
 | 978 | entered, and :meth:`release` will be called when the block is exited.  Hence, | 
 | 979 | the following snippet:: | 
 | 980 |  | 
 | 981 |    with some_lock: | 
 | 982 |        # do something... | 
 | 983 |  | 
 | 984 | is equivalent to:: | 
 | 985 |  | 
 | 986 |    some_lock.acquire() | 
 | 987 |    try: | 
 | 988 |        # do something... | 
 | 989 |    finally: | 
 | 990 |        some_lock.release() | 
| Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 991 |  | 
 | 992 | Currently, :class:`Lock`, :class:`RLock`, :class:`Condition`, | 
 | 993 | :class:`Semaphore`, and :class:`BoundedSemaphore` objects may be used as | 
| Antoine Pitrou | b96a354 | 2012-04-10 22:47:55 +0200 | [diff] [blame] | 994 | :keyword:`with` statement context managers. |