Как предотвратить перезапись значения в 2 потоках? - PullRequest
0 голосов
/ 16 мая 2019

Я пытался запустить операцию, которая меняла время ожидания для параллельного выполнения в потоках. В операции я устанавливаю значение и ожидаю завершения операции, и вызываю другую функцию. Но поток, который начался после ожидания, перезаписывает значение для всех других потоков.

Я пытался использовать метод 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 Ответ

1 голос
/ 16 мая 2019

Сделать temp переменной экземпляра класса temp.Поместите это в __init__ как self.temp = {}.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...