mirror of
https://github.com/python/cpython.git
synced 2025-08-29 21:25:01 +00:00
Use threading.local() instead of threading.currentThread().
This commit is contained in:
parent
99148e7eaa
commit
ef66debd7e
1 changed files with 56 additions and 20 deletions
|
@ -374,30 +374,66 @@ _condition_map = {ConversionSyntax:InvalidOperation,
|
||||||
|
|
||||||
##### Context Functions #######################################
|
##### Context Functions #######################################
|
||||||
|
|
||||||
#To fix reloading, force it to create a new context
|
# The getcontext() and setcontext() function manage access to a thread-local
|
||||||
#Old contexts have different exceptions in their dicts, making problems.
|
# current context. Py2.4 offers direct support for thread locals. If that
|
||||||
if hasattr(threading.currentThread(), '__decimal_context__'):
|
# is not available, use threading.currentThread() which is slower but will
|
||||||
del threading.currentThread().__decimal_context__
|
# work for older Pythons.
|
||||||
|
|
||||||
def setcontext(context):
|
try:
|
||||||
"""Set this thread's context to context."""
|
threading.local
|
||||||
if context in (DefaultContext, BasicContext, ExtendedContext):
|
|
||||||
context = context.copy()
|
|
||||||
threading.currentThread().__decimal_context__ = context
|
|
||||||
|
|
||||||
def getcontext():
|
except AttributeError:
|
||||||
"""Returns this thread's context.
|
|
||||||
|
|
||||||
If this thread does not yet have a context, returns
|
#To fix reloading, force it to create a new context
|
||||||
a new context and sets this thread's context.
|
#Old contexts have different exceptions in their dicts, making problems.
|
||||||
New contexts are copies of DefaultContext.
|
if hasattr(threading.currentThread(), '__decimal_context__'):
|
||||||
"""
|
del threading.currentThread().__decimal_context__
|
||||||
try:
|
|
||||||
return threading.currentThread().__decimal_context__
|
def setcontext(context):
|
||||||
except AttributeError:
|
"""Set this thread's context to context."""
|
||||||
context = Context()
|
if context in (DefaultContext, BasicContext, ExtendedContext):
|
||||||
|
context = context.copy()
|
||||||
threading.currentThread().__decimal_context__ = context
|
threading.currentThread().__decimal_context__ = context
|
||||||
return context
|
|
||||||
|
def getcontext():
|
||||||
|
"""Returns this thread's context.
|
||||||
|
|
||||||
|
If this thread does not yet have a context, returns
|
||||||
|
a new context and sets this thread's context.
|
||||||
|
New contexts are copies of DefaultContext.
|
||||||
|
"""
|
||||||
|
try:
|
||||||
|
return threading.currentThread().__decimal_context__
|
||||||
|
except AttributeError:
|
||||||
|
context = Context()
|
||||||
|
threading.currentThread().__decimal_context__ = context
|
||||||
|
return context
|
||||||
|
|
||||||
|
else:
|
||||||
|
|
||||||
|
local = threading.local()
|
||||||
|
|
||||||
|
def getcontext(_local=local):
|
||||||
|
"""Returns this thread's context.
|
||||||
|
|
||||||
|
If this thread does not yet have a context, returns
|
||||||
|
a new context and sets this thread's context.
|
||||||
|
New contexts are copies of DefaultContext.
|
||||||
|
"""
|
||||||
|
try:
|
||||||
|
return _local.__decimal_context__
|
||||||
|
except AttributeError:
|
||||||
|
context = Context()
|
||||||
|
_local.__decimal_context__ = context
|
||||||
|
return context
|
||||||
|
|
||||||
|
def setcontext(context, _local=local):
|
||||||
|
"""Set this thread's context to context."""
|
||||||
|
if context in (DefaultContext, BasicContext, ExtendedContext):
|
||||||
|
context = context.copy()
|
||||||
|
_local.__decimal_context__ = context
|
||||||
|
|
||||||
|
del threading, local # Don't contaminate the namespace
|
||||||
|
|
||||||
|
|
||||||
##### Decimal class ###########################################
|
##### Decimal class ###########################################
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue