2016-06-04 9 views
0
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 

Problem ist Cookie-Wert wird nach jeweils 10 min geändert. Wenn jedoch eine Methode bereits den älteren Cookie hatte, schlägt die Anfrage fehl. Dies geschieht, wenn mehrere Threads dasselbe A-Objekt verwenden. Ich suche nach einer Lösung, wo immer wir versuchen, zu aktualisieren, d. H. Cookie-Wert ändern, sollte niemand in der Lage sein, den Cookie-Wert zu lesen, stattdessen sollte es eine Sperre bei Cookie-Wert geben.block read der Instanzvariable beim Versuch, es zu setzen

Antwort

0

Dies ist ein Job für eine Bedingungsvariable.

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 

Nur ein Thread kann einen with Block von self.refreshing zu einem Zeitpunkt geregelt eingeben. Der erste zu testende Thread wird erfolgreich sein. die anderen werden blockieren, bis die erste ihren with Block verlässt.