比方說,我有以下的線程在我的Rails Web應用程序:一種通過Rails在多個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
正如你所看到的,「計數」變量在所有線程共享。現在
,我想要做的是份額「計數」跨多個httpd的請求,並允許在my_action到myController的可以訪問該變量。舉例來說,也許無論什麼產生ruby進程爲httpd進程提供服務可以在其範圍內保存變量計數,然後爲httpd進程生成的ruby進程可以訪問該變量。
使用memcached,數據庫和會話變量是不可能的。最終'計數'實際上是一個資源對象...一個FTP連接。
這可能嗎?也許使用Apache /乘客工作者,如this?
示例代碼將不勝感激。
Rails是單線程設計,所以我不相信你想要做什麼是可能的或可取的。至少,我從來沒有見過它做過。 – 2011-03-09 18:41:08
好吧,這很糟糕。必須有一些方法來解決這樣的問題。 – 2011-03-09 19:29:29