Python threads and global vars
假设我在名为"firstmodule.py"的模块中具有以下功能:
1 2 3 | def calculate(): # addCount value here should be used from the mainModule a=random.randint(0,5) + addCount |
现在我有一个不同的模块叫做"secondmodule.py":
1 2 3 | def calculate(): # addCount value here too should be used from the mainModule a=random.randint(10,20) + addCount |
我正在运行一个名为"mainmodule.py"的模块,其中包含以下内容(请注意全局"addcount"var):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | import firstModule import secondModule addCount=0 Class MyThread(Thread): def __init__(self,name): Thread.__init__(self) self.name=name def run(self): global addCount if self.name=="firstModule": firstModule.calculate() if self.name=="secondModule": secondModule.calculate() def main(): the1=MyThread("firstModule"); the2=MyThread("secondModule"); the1.start() the2.start() the1.join() the2.join() # This part doesn't work: print firstModule.a print secondModule.a |
基本上,我希望两个模块中的"addcount"值都是"mainmodule"中的值。之后,当线程完成时,我要打印值他们两个都是"A"。上面的例子不起作用。我在想我怎么修理它。
将"addCount"传递给函数"calculate",在"calculate"中返回"a"的值,并将其分配给mythread实例中的新属性。
1 2 3 | def calculate(addCount): a = random.randint(0, 5) + addCount return a |
python中的模块都是单件的,所以您可以将全局变量放在module globalmodule.py中,并同时具有firstmodule、secondmodule和mainmodule
但是,一般来说,线程具有全局状态是一种糟糕的实践。
这永远不会奏效:
打印第一个模块.a打印第二模块A
因为在这里:
1 2 3 | def calculate(): # addCount value here should be used from the mainModule a=random.randint(0,5) + addCount |
如果您真的想将
1 2 3 4 | def calculate(): # addCount value here should be used from the mainModule global a a=random.randint(0,5) + addCount |