Trying to use threading.local()

Thomas Jollans tjol at tjol.eu
Fri Sep 14 04:34:52 EDT 2018


On 14/09/18 10:29, Chris Angelico wrote:
> On Fri, Sep 14, 2018 at 5:25 PM, Antoon Pardon <antoon.pardon at vub.be> wrote:
>> On 13-09-18 14:29, Chris Angelico wrote:
>>> "Preferred" doesn't exclude the possibility that alternatives are
>>> needed, though. For example, good luck making decimal.Decimal contexts
>>> work correctly without the help of thread-locals - there MIGHT be a
>>> way to do it, but even if there is, it sure won't be pretty.
>> Can you elaborate on that. Suppose I have two threads, one in which I need
>> a precision of 3 and the other in which I need a precision of 7. In what
>> circumstances is it needed to use threads-locals to accomplish this and
>> how do I accomplish this?
>>
>> If I want my decimal code be usable with threads, how should I write it?
> Let's say both of those threads call the same function, which does this:
>
> def f(x, y):
>      return x * 3 + y / 4
>
> You can't pass a context as a parameter, so you have to set the
> context externally. Which is done thus:
>
> https://docs.python.org/3/library/decimal.html#decimal.setcontext
>
> Note that this sets it *for the current thread*.
>
> ChrisA

Ideally use a context manager to manage your context: 
https://docs.python.org/3/library/decimal.html#decimal.localcontext

-- Thomas



More information about the Python-list mailing list