在线程之间共享类属性

时间:2017-03-02 18:24:45

标签: python multithreading thread-safety

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

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是否在主线程和子线程之间创建共享值的临时副本并定期“同步”或问题出在其他地方?

1 个答案:

答案 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__