为什么我的线程没有看到全局变量的任何变化?

时间:2015-09-01 14:36:30

标签: python multiprocessing

我正在努力让我的线程读取变量位于它之外。

以下是代码:

lst = []

class InstancesManager(object):

...

    def start_thread(self):
        process = multiprocessing.Process(target=self.checker)
        process.daemon = True
        process.start()

    def checker(self):
        global lst
        while True:
             print lst
             time.sleep(5)

...

global lst
manager = InstancesManager()
lst.append('foo')
manager.start_thread()
lst.append('bar')

问题是:尽管我用它执行了任何更改,但线程始终将lst打印为['foo']。我试图将lst保存为类变量并访问“print self.lst”和“manager.lst.append('bar')”,但结果始终相同。

如何让我的线程看到主程序变量的变化?

2 个答案:

答案 0 :(得分:3)

你的线程不是一个线程 - 这是一个过程。它获得了自己的全局变量副本。

对于真正的线程(及其所有警告),请查看线程模块:

https://docs.python.org/2/library/threading.html#module-threading

答案 1 :(得分:-1)

我对Python知之甚少,但除非默认情况下它的所有变量都是原子的(我怀疑是这种情况)从多个线程访问的变量应该是原子的,或者是互斥保护的。

在将多进程更改为实际多线程之后仍然如此(我不知道是这种情况)。