5.1.5.6 线程
"全局"上下文实际上是线程本地上下文,所以完全可以使用不同的值分别配置各个线程。
import decimal
import threading
from queue import PriorityQueue
class Multiplier(threading.Thread):
def __init__(self,a,b,prec,q):
self.a = a
self.b = b
self.prec = prec
self.q = q
threading.Thread.__init__(self)
def run(self):
c = decimal.getcontext().copy()
c.prec = self.prec
decimal.setcontext(c)
self.q.put((self.prec, a * b))
a = decimal.Decimal('3.14')
b =decimal.Decimal('1.234')
# A PriorityQueue will return values sorted by precision,
# no matter in which order the threads finish.
q = PriorityQueue()
threads = [Multiplier(a,b,i,q) for i in range(1,6)]
for t in threads:
t.start()
for t in threads:
t.join()
for i in range(5):
prec,value = q.get()
print('{} {}'.format(prec,value))
这个例子使用指定的值来创建一个新的上下文,然后安装到各个线程中。
运行结果: