第五章:数学运算-decimal:定点数和浮点数的数学运算-上下文-线程

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))

这个例子使用指定的值来创建一个新的上下文,然后安装到各个线程中。
运行结果:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_43193719/article/details/87949406