2010-05-08 1 views
1

내 웹 사이트에 동일한 사용자가 두 번 연속 방문하지 못하게하려는 특정 페이지가 있습니다. 이를 방지하기 위해 Python의 스레딩 라이브러리에서 Lock 객체를 만들 계획입니다. 그러나, 나는 세션을 통해 그걸 저장할 필요가있다. 세션 (특히 비커 세션)에서 Lock 객체를 저장하려고 할 때주의해야 할 것이 있습니까?비커 세션에서 파이썬 잠금 개체를 저장해야하는 데 걱정해야 할 사항이 있습니까?

+0

'두 번 연속 방문 하시겠습니까?'정확히 무엇을 의미합니까? – wump

+0

사용자가 방문한 페이지가 하위 프로세스를 생성합니다. 이러한 프로세스 중 두 개가 동시에 실행되면 서로 충돌 할 수 있습니다. 사용자가 페이지를 2 번 이상 빨리 방문하면 2 개 이상의 프로세스가 시작되어 서로를 중단시킬 수 있습니다. –

답변

1

세션 (또는 직렬화가 필요한 다른 곳)에 threading.Lock 인스턴스를 저장하는 것은 끔찍한 생각이며 시도 할 경우 예외가 발생합니다 (예 : 해당 객체를 직렬화 할 수 없기 때문에 pickle d) 일 수 없습니다. 프로세스의 공동 직렬화에 대한 전통적인 접근 방식은 file locking (지정하는대로 사용자별로 잠금을 사용하려는 경우 /tmp/locks/<username>과 같은 디렉토리의 "인공"파일)에 의존합니다. 나는 위키피디아 진입이 일반적인 영역을 설명하는 좋은 일을한다고 믿는다; 어떤 OS를 운영하고 있는지 알려 주시면 좀 더 구체적으로 제안 할 수 있습니다 (불행히도이 경우 크로스 플랫폼 솔루션이 없다고 생각합니다).

+0

Pylons/Beaker 세션 자체가 잠금을 지원한다는 것도 알았습니다. –

0

방금 ​​잠금 장치를 잠그고 세션에 저장하는 것이 두 단계를 거쳐 잠금 장치의 기본 동작의 목적을 무효화하기 때문에 이것이 끔찍한 질문이라는 것을 알았습니다.