如何防止2个线程覆盖值?

时间:2019-05-16 09:02:41

标签: python class object parallel-processing

我试图运行一个等待时间不同的操作,以便在线程中并行执行。在操作中,我正在设置一个值并等待操作完成,然后调用另一个函数。但是等待之后启动的线程将覆盖所有其他线程的值。

我尝试使用thread.local方法但不起作用

import threading
class temp:
    def __init__(self):
        self.temp = {}
    def set_data(self,data):
        self.temp['data'] = data
    def get_data(self):
        return self.temp['data']

def process(t):        
    # print(t)                                         
    # mydata = threading.local()
    print('before sleep',threading.current_thread(),t.get_data())
    # sleep(random.randint(0,1)*10)
    print('after sleep',threading.current_thread(),t.get_data())

if __name__=='__main__':
    threads = []
    test = []
    for i in range(0,4):
        t = temp()
        t.set_data(i)
        threads.append(threading.Thread(target=process, args=(t,)))         
        threads[-1].start()
    for t in threads:
        t.join()

我希望我发送给线程的值在等待时间后保持不变。但是线程会干扰并提供随机输出

1 个答案:

答案 0 :(得分:1)

使temp为类temp的实例变量。将其作为__init__放在self.temp = {}中。