의 내가 내 레일 웹 응용 프로그램에서 다음과 같은 스레딩 있다고 가정 해 봅시다 : 당신이 볼 수 있듯이여러 httpd 스레드에서 변수를 레일스와 공유하는 방법은 무엇입니까?
class MyController
def my_action
count = 0
arr = []
10.times do |i|
arr[i] = Thread.new {
sleep(rand(0)/10.0)
Thread.current["mycount"] = count
count += 1
}
end
arr.each {|t| t.join; print t["mycount"], ", " }
puts "count = #{count}"
end
end
의 '계산'변수는 모든 스레드에서 공유된다.
이제는 내가 뭘 원하는 주 '카운트' 여러 아파치 요청에 걸쳐이며 는 MyController에있는 my_action 그 변수에 액세스 할 수 있습니다. 예를 들어, httpd 프로세스를 제공하기 위해 루비 프로세스가 생성되면 그 범위 내에서 변수 개수를 보유 할 수 있으며, 그러면 httpd 프로세스를 위해 생성 된 루비 프로세스가 해당 변수에 액세스 할 수 있습니다.
memcached, 데이터베이스 및 세션 변수를 사용하는 것은 의문의 여지가 없습니다. 궁극적으로 '카운트'는 실제로 FTP 연결 인 리소스 객체가 될 것입니다.
이것이 가능합니까? 아마도 this과 같은 Apache/Passenger 근로자를 사용하고 있을까요?
예제 코드는 인정 될 것입니다.
레일스는 디자인 상 단일 스레드이므로, 사용자가하려는 일이 가능하거나 권장되지 않는다고 생각합니다. 적어도, 나는 전에 그것을 한 번도 본 적이 없다. –
글쎄. 이 같은 것을 꺼내는 어떤 방법이 있어야합니다. –