본문 바로가기
파이썬

파이썬 Python 인스턴스 변수는 스레드로부터 안전합니까?

by º기록 2020. 9. 22.
반응형

좋습니다. 먼저 다음 코드를 확인하세요.

class DemoClass():

    def __init__(self):
        #### I really want to know if self.Counter is thread-safe. 
        self.Counter = 0

    def Increase(self):
        self.Counter = self.Counter + 1

    def Decrease(self):
        self.Counter = self.Counter - 1

    def DoThis(self):
        while True:
            Do something

            if A happens:
                self.Increase()
            else:
                self.Decrease()

            time.sleep(randomSecs)

    def DoThat(self):
        while True:
            Do other things

            if B happens:
                self.Increase()
            else:
                self.Decrease()

            time.sleep(randomSecs)

    def ThreadSafeOrNot(self):
        InterestingThreadA = threading.Thread(target = self.DoThis, args = ())
        InterestingThreadA.start()

        InterestingThreadB = threading.Thread(target = self.DoThat, args = ())
        InterestingThreadB.start()

위와 같은 상황에 처해 있습니다. self.Counter 에 대해 스레드로부터 안전한지 정말로 알고 싶습니다. 그렇지 않은 경우 어떤 옵션이 있습니까? 이 리소스를 잠그기 위해 threading.RLock () 만 생각할 수 있습니다. 더 좋은 생각이 있습니까?

 

해결 방법

 

잠금, RLock, 세마포, 조건, 이벤트 및 대기열을 사용할 수 있습니다.
And this article helped me a lot.


 

참조 페이지 https://stackoverflow.com/questions/8309902

 

 

반응형

댓글