自变量在多个线程之间共享

时间:2020-09-15 06:42:19

标签: python python-3.x

这是导致我遇到问题的脚本: 3个线程:T1,S1,S2和2个队列。 T1将上下文变量发送到q_Strategy_1和q_Strategy_2。 S1和S2分别从q_Strategy_1和q_Strategy_2读取上下文。 S1和S2将一些信息添加到上下文中并进行打印。

预期输出为:

{'Var_1': 'a', 'Var_2': 'b'}
{'Var_1': 'a', 'Var_2': 'b', 'Var_3': 'c'}
{'Var_1': 'a', 'Var_2': 'b', 'Var_4': 'd'}

以下脚本返回时

{'Var_1': 'a', 'Var_2': 'b'}
{'Var_1': 'a', 'Var_2': 'b', 'Var_3': 'c'}
{'Var_1': 'a', 'Var_2': 'b', 'Var_3': 'c', 'Var_4': 'd'}

关于我如何使用变量/类/线程,可能是语法错误,但我找不到它:(

import threading
import time
import queue

#setup queue environment
q_Strategy_1   = queue.Queue(100)
q_Strategy_2   = queue.Queue(100)

class T1(object):
    def __init__(self, name=None):
        self.name = name
        thread = threading.Thread(target=self.run, args=())
        thread.start()
        self.__context  = {}

    def run(self):
        while True:
            self.__context = {'Var_1':"a",'Var_2':"b"}
            print(self.__context)
            q_Strategy_1.put(self.__context)
            q_Strategy_2.put(self.__context)
            time.sleep(3)

class S1(object):
    def __init__(self, name=None):
        self.name = name
        thread = threading.Thread(target=self.run, args=())
        thread.start()
        self.__context  = {}

    def run(self):
        while True:
            self.__context = {}
            if not q_Strategy_1.empty():
                self.__context = q_Strategy_1.get()
                self.__context['Var_3'] = "c"
                print(self.__context)

class S2(object):
    def __init__(self, name=None):
        self.name = name
        thread = threading.Thread(target=self.run, args=())
        thread.start()
        self.__context  = {}

    def run(self):
        while True:
            self.__context = {}
            if not q_Strategy_2.empty():
                self.__context = q_Strategy_2.get()
                self.__context['Var_4'] = "d"
            print(self.__context)

T1 = T1(name='T1')
S1 = S1(name='S1')
S2 = S2(name='S2')

0 个答案:

没有答案
相关问题