我正在努力让我的线程读取变量位于它之外。
以下是代码:
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')”,但结果始终相同。
如何让我的线程看到主程序变量的变化?
答案 0 :(得分:3)
你的线程不是一个线程 - 这是一个过程。它获得了自己的全局变量副本。
对于真正的线程(及其所有警告),请查看线程模块:
https://docs.python.org/2/library/threading.html#module-threading
答案 1 :(得分:-1)
我对Python知之甚少,但除非默认情况下它的所有变量都是原子的(我怀疑是这种情况)从多个线程访问的变量应该是原子的,或者是互斥保护的。
在将多进程更改为实际多线程之后仍然如此(我不知道是这种情况)。