2012-01-05 2 views
1

대기열/스레드가 실행될 때까지 사용자가 메소드를 실행하지 못하게하는 방법이 있는지 궁금합니다.레일즈 - 모델 메소드의 다중 실행 방지

+0

MRI Ruby (? 1.8 또는 1.9) 또는 JRuby 등의 차이가있을 수 있으므로 언급하는 것이 좋습니다. GIL은 MRI Ruby 1.8에서 병렬 실행을 방지합니다. 따라서 동일한 프로세스 내에서 동일한 모델 방법을 동시에 실행할 수 없습니다. – Nick

+0

Ruby 1.8.7입니다. 작업이 실행되면 다른 세션을 가진 다른 사용자가 같은 작업을 다시 실행하지 않아도됩니다. 도와주세요. – oprogfrogo

+0

@ ryan-bigg는 기본적으로 메서드에 대한 세마포 잠금을 만드는 올바른 아이디어를 가지고 있지만 여러 프로세스가 동시에 상호 작용하지 못하도록 잠금을 설정해야하기 때문에 파일 기반의 세마포를 사용해야합니다. – Nick

답변

3

running 부울 속성과 같은 다른 속성이 있는지 확인하는 방법을 정의 할 수 있습니다. 이 속성이 true이면 메소드를 사용할 수 없습니다.

+0

Ryan, 실행중인 부울을 사용하는 방법에 대해 자세히 설명하십시오. 전역 상수를 부울로 설정하고 작업이 완료 되 자마자 거짓으로 전환하는 것을 말하고 있습니까? – oprogfrogo

+0

작업이 완료되면이를 false로 토글합니다. –