以下代码是否正确? (它初始化一个在其构造函数中启动线程以改变其状态的对象。)
import threading
import time
class Test():
def __init__(self):
self.a = False
def workload():
self.a = True
self.thread = threading.Thread(target = workload)
self.thread.start()
def display(self):
print self.a
test = Test()
while True:
test.display()
time.sleep(0.1)
它输出 True 但我有一个更复杂的测试用例(这里不能轻易复制)工作负载做更复杂的事情(涉及睡眠,从中检索项目)虽然 self.a 的值在工作负载函数中发生了变化,但是管理器Queue)以及程序从不输出 True 的位置。 Python是否在主线程和子线程之间创建共享值的临时副本并定期“同步”或问题出在其他地方?
答案 0 :(得分:0)
__main__
进程和线程def workload
似乎都使用相同的对象
我在time.sleep(0.1)
之前添加了self.a = True
,以便__main__
进程有机会显示错误。
我得到以下输出:
Start __main__
<__main__.Workload object at 0xf7027fac> <function Workload.__init__.<locals>.workload at 0xf7017c44>
False
<__main__.Workload object at 0xf7027fac> <function Workload.__init__.<locals>.workload at 0xf7017c44>
False
True
True
True
EXIT __main__