2017-03-02 141 views
0

以下代码是否正确? (它初始化一个在其构造函数中启动一个线程的对象来改变它的状态)。在线程之间共享类属性

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) 

它输出但我有一个更复杂的测试情况下(即不能轻易地在这里重现),其中工作量确实要复杂得多的东西(包括睡觉,从管理者队列中检索项目),并在那里程序不会输出真正的 - 虽然self.a的值在工作负载函数内发生了变化。 Python是否会在主线程和子线程之间创建共享值的临时副本,并定期“同步”,或者问题出在别处?

回答

0

__main__进程和线程def workload似乎使用相同的对象。
我在self.a = True之前添加了time.sleep(0.1)以给出__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__