python类中的实例变量在不同的线程中分歧

时间:2014-03-14 02:27:27

标签: python multithreading

我已经发布了我的特定问题here,但我只是想知道,如果有任何情况,实例变量最终会在一个线程中“发散”。即,

class Foo:
  def __init__(self):
    self.x = 0
    self.lock = threading.Lock()

  def bar(self):
    with self.lock:
      self.x += 1

  def baz(self):
    with self.lock:
      self.x += 2

如果f = Foo()f.bar以及f.baz在不同的主题中被调用,bar的更改是否有可能不会反映在baz中,反之亦然?

1 个答案:

答案 0 :(得分:0)

由于您使用的是Lock,即使从两个不同的主题调用f.bazf.barx的值也不会过时。

这是因为每个Foo类实例只能有一个线程可以在给定时间调用bazbar。当一个方法处理时,不能调用另一个方法,并且不会发生竞争条件,因为bazbar中的读 - 修改 - 写操作都是专门完成的