6.3.6 Working with threads
The getcontext() function accesses a different Context
object for each thread. Having separate thread contexts means that threads
may make changes (such as getcontext.prec=10
) without interfering with
other threads.
Likewise, the setcontext() function automatically assigns its target to the current thread.
If setcontext() has not been called before getcontext(), then getcontext() will automatically create a new context for use in the current thread.
The new context is copied from a prototype context called DefaultContext. To control the defaults so that each thread will use the same values throughout the application, directly modify the DefaultContext object. This should be done before any threads are started so that there won't be a race condition between threads calling getcontext(). For example:
# Set applicationwide defaults for all threads about to be launched DefaultContext.prec = 12 DefaultContext.rounding = ROUND_DOWN DefaultContext.traps = ExtendedContext.traps.copy() DefaultContext.traps[InvalidOperation] = 1 setcontext(DefaultContext) # Afterwards, the threads can be started t1.start() t2.start() t3.start() . . .
See About this document... for information on suggesting changes.