0
class MyView(ListView): 
    def get_context_data(self, **kwargs): 
     context = super().get_context_data(**kwargs) 
     a_class = MyClass() 
     context['...'] = a_class.is_a_lock_reduntant_here() 
     return context 


class MyClass(object): 
    def __init__(self): 
     self.counter = 0 

    def is_a_lock_reduntant_here(self): 
     return self.counter += 1 

The abovethread safe 연습이 아니며 일반적으로 잠금을 사용합니다.Django 클래스 기반 뷰 :이 예제에서는 자물쇠가 제대로 작동합니까?

그러나 django states 그 :

클래스 기반 뷰에서 게재 각 요청 독립된 상태를 갖고; 따라서 self.foo = 3은 스레드 안전 연산이므로 상태 변수를 인스턴스에 저장하는 것이 안전합니다. 상태 변수 를 저장하는atomic operation 때문에

나는 완전히 위의 견적을 이해하지 않습니다.

내 경우에는 동시에 읽고 교체합니다. 동일한 인용문은 각보기가 "독립적 인 상태"라는 것을 읽습니다.

잠금을 중복 사용하는 것이 안전할까요?

답변

1

이 인스턴스는 스레드간에 공유 될 수 없으므로 여기서 잠금을 사용할 필요가 없습니다.

사용자가 링크하는 문서가 표시 될 때마다 각 요청은 스레드로부터 안전한 동작입니다. 그 일환으로 ListView는 각 요청에 대해 인스턴스화되고 해당 요청 내에서 get_context_data이 호출됩니다. 즉, MyClass의 인스턴스화는 단일 스레드 내에서만 가능합니다.

관련 문제