Original Translation
2907
(Contributed by Tarek Ziade.)
2908
The *sqlite3* module has some new features:
2909
XXX *enable_load_extension*
2910
XXX *load_extension*
2911
New :class:`~sqlite3.Connection` attribute :attr:`~sqlite3.Connection.in_transaction` is :const:`True` when there are uncommitted changes, and :const:`False` otherwise. (Contributed by R. David Murray and Shashwat Anand, :issue:`8845`.)
2912
Multi-threading
2913
The mechanism for serializing execution of concurrently running Python threads (generally known as the GIL or Global Interpreter Lock) has been rewritten. Among the objectives were more predictable switching intervals and reduced overhead due to lock contention and the number of ensuing system calls. The notion of a "check interval" to allow thread switches has been abandoned and replaced by an absolute duration expressed in seconds. This parameter is tunable through :func:`sys.setswitchinterval()`. It currently defaults to 5 milliseconds.
2914
Additional details about the implementation can be read from a `python-dev mailing-list message <http://mail.python.org/pipermail/python-dev/2009-October/093321.html>`_ (however, "priority requests" as exposed in this message have not been kept for inclusion).
2915
Recursive locks (created with the :func:`threading.RLock` API) now benefit from a C implementation which makes them as fast as regular locks, and between 10x and 15x faster than their previous pure Python implementation.
2916
(Contributed by Antoine Pitrou; :issue:`3001`.)