single: interpreter lock
single: lock, interpreter
-The Python interpreter is not fully thread safe. In order to support
+The Python interpreter is not fully thread-safe. In order to support
multi-threaded Python programs, there's a global lock, called the :dfn:`global
interpreter lock` or :dfn:`GIL`, that must be held by the current thread before
it can safely access Python objects. Without the lock, even the simplest
If *locale* is omitted or ``None``, the current setting for *category* is
returned.
- :func:`setlocale` is not thread safe on most systems. Applications typically
+ :func:`setlocale` is not thread-safe on most systems. Applications typically
start with a call of ::
import locale
The ``'d'`` and ``'i'`` arguments used when creating ``num`` and ``arr`` are
typecodes of the kind used by the :mod:`array` module: ``'d'`` indicates a
double precision float and ``'i'`` indicates a signed integer. These shared
- objects will be process and thread safe.
+ objects will be process and thread-safe.
For more flexibility in using shared memory one can use the
:mod:`multiprocessing.sharedctypes` module which supports the creation of
Note that, unlike :func:`run_module`, the alterations made to :mod:`sys`
are not optional in this function as these adjustments are essential to
- allowing the execution of sys.path entries. As the thread safety
+ allowing the execution of sys.path entries. As the thread-safety
limitations still apply, use of this function in threaded code should be
either serialised with the import lock or delegated to a separate process.
Importing in threaded code
--------------------------
-While the import machinery is thread safe, there are two key
-restrictions on threaded imports due to inherent limitations in the way
-that thread safety is provided:
+While the import machinery is thread-safe, there are two key restrictions on
+threaded imports due to inherent limitations in the way that thread-safety is
+provided:
* Firstly, other than in the main module, an import should not have the
side effect of spawning a new thread and then waiting for that thread in
def test_localecalendars(self):
# ensure that Locale{Text,HTML}Calendar resets the locale properly
# (it is still not thread-safe though)
+ old_october = calendar.TextCalendar().formatmonthname(2010, 10, 10)
try:
- def_locale = locale.getdefaultlocale()
+ calendar.LocaleTextCalendar(locale='').formatmonthname(2010, 10, 10)
except locale.Error:
- # cannot determine a default locale -- skip test
+ # cannot set the system default locale -- skip rest of test
return
- old_october = calendar.TextCalendar().formatmonthname(2010, 10, 10)
- calendar.LocaleTextCalendar(
- locale=def_locale).formatmonthname(2010, 10, 10)
- calendar.LocaleHTMLCalendar(
- locale=def_locale).formatmonthname(2010, 10)
+ calendar.LocaleHTMLCalendar(locale='').formatmonthname(2010, 10)
new_october = calendar.TextCalendar().formatmonthname(2010, 10, 10)
self.assertEquals(old_october, new_october)