假设我在名为“firstModule.py”的模块中有以下功能:
def calculate():
# addCount value here should be used from the mainModule
a=random.randint(0,5) + addCount
现在我有一个名为“secondModule.py”的不同模块:
def calculate():
# addCount value here too should be used from the mainModule
a=random.randint(10,20) + addCount
我正在运行一个名为“mainModule.py”的模块,该模块具有以下内容(请注意全局“addCount”var):
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”。上面的例子不起作用。我想知道如何解决它。
答案 0 :(得分:4)
将'addCount'传递给'calculate'函数,在'calculate'中返回'a'的值,并将其分配给MyThread实例中的新属性。
def calculate(addCount):
a = random.randint(0, 5) + addCount
return a
答案 1 :(得分:2)
python中的模块是单例,因此您可以将全局变量放在模块globalModule.py中,并同时具有firstModule,secondModule和mainModule import globalModule
,并且它们都将访问相同的addCount。
但是,一般来说,线程拥有全局状态是一种不好的做法。
这永远不会奏效:
打印firstModule.a print secondModule.a
因为在这里:
def calculate():
# addCount value here should be used from the mainModule
a=random.randint(0,5) + addCount
a
是函数calculate
的局部变量。
如果您真的想将a
写为模块级变量,请添加全局声明:
def calculate():
# addCount value here should be used from the mainModule
global a
a=random.randint(0,5) + addCount