有几个类似的问题,我已经应用了建议的方法,但它似乎不起作用。
我正在尝试从一个线程更新一个全局变量DYNOK:
<标题>import time
import thr
global DYNOK
DYNOK = False
th = thr.thr()
th.start()
time.sleep(1)
print(DYNOK)
<标题> 线程from threading import Thread
class thr(Thread):
def __init__(self):
Thread.__init__(self)
def run(self):
global DYNOK
DYNOK = True
print(DYNOK)
我所期望的是主输出True,但是全局DYNOK似乎没有得到更新。
标题>标题>由于您的Master和Thread是独立的文件(基于导入),因此它们也是具有自己命名空间的独立模块。
所以要使你的工作,你需要从他们导入master,然后使用master。DYNOK那里。然而,这不起作用,因为它会创建一个循环依赖,因为master也会导入它们。
如果你想让模块分开,但共享状态,你可以创建第三个文件,即模块,例如state.py,然后在那里说DYNOK = False。并导入state &使用状态。master和thr中的DYNOK。当您这样做时,在任何地方都不需要global关键字。
OP建议的另一种解决方案是使用回调函数进行通信。如下所示:
主:(部分,见OP补空)
DYNOK = False
def setDYNOK(val):
global DYNOK
DYNOK = val
print "New value for DYNOK set:", DYNOK
th = thr.thr(setDYNOK) #pass the callback func to the thread initialiser
...
线程:from threading import Thread
class thr(Thread):
def __init__(self, callback):
Thread.__init__(self)
self.callback = callback
def run(self):
self.callback(True) #calls Master's setDYNOK to communicate new value