尝试设置时阻止读取实例变量

时间:2016-06-04 11:54:51

标签: python thread-safety

Class A(object):
  def __init__(self, cookie):
    self.__cookie = cookie

  def refresh_cookie():
    ```This method refresh the cookie after every 10 min```
    self.__cookie = <newcookie>

  @property
  def cookie(self):
    return self.__cookie

问题是每10分钟后cookie值会发生变化。但是,如果某些方法已经使用了较旧的cookie,则请求失败。当多个线程使用相同的A对象时会发生这种情况。 我正在寻找一些解决方案,每当我们尝试刷新,即修改cookie值时,没有人应该能够读取cookie值而不应该锁定cookie值。

1 个答案:

答案 0 :(得分:0)

这是条件变量的作业。

from threading import Lock, Condition

class A(object):
  def __init__(self, cookie):
    self.__cookie = cookie
    self.refreshing = Condition()

  def refresh_cookie():
    ```This method refresh the cookie after every 10 min```
    with self.refreshing:
        self.__cookie = <newcookie>
        self.refreshing.notifyAll()

  @property
  def cookie(self):
    with self.refreshing:
        return self.__cookie

一次只有一个线程可以进入由with管理的self.refreshing块。尝试的第一个线程将成功;其他人将阻止,直到第一个离开with阻止。