Python: update global from thread



有几个类似的问题,我已经应用了建议的方法,但它似乎不起作用。

我正在尝试从一个线程更新一个全局变量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

相关内容

最新更新