我需要將進程中的作業從一個隊列中處理出來,同時IO執行異步。這非常簡單。該問題是這些作業可以將其他項添加到隊列。在Ruby中構建一個異步隊列
我想我一直在擺弄這個問題時間太長,所以我的大腦多雲 - 它不應該太難。我總是想出一個任意或場景:
- 隊列可以異步執行作業,並且結果可以在之後加入。
- 隊列可以同步執行作業,直到最後一次完成並且隊列爲空。
我已經一切從EventMachine的和歌利亞(兩者都可以使用EM::HttpRequest
)來擺弄賽璐珞(實際上從未得到周圍雖然建立一些與它),寫的用纖維枚舉。我的大腦雖然油炸。
我想什麼,簡單地說,就是要能夠做到這一點:
items = [1,2,3]
items.each do |item|
if item.has_particular_condition?
items << item.process_one_way
elsif item.other_condition?
items << item.process_another_way
# ...
end
end
#=> [1,2,3,4,5,6]
...其中4,5,6人處理的一整套原始項目的所有成果, 7,8和9是來自處理4,5和6的結果。我不需要擔心無限期地處理隊列,因爲我正在處理的數據將在幾次迭代之後結束。
高層指導,評論,鏈接到其他庫等都是受歡迎的,以及較低級別的實現代碼示例。
是的,異步系統可能很難建立。你有我的道義上的支持:) –
我的第一個建議是:睡在它上面。當你開始將頭撞向牆壁時,事情似乎變得複雜......從經驗中,我知道現在是時候稱呼它。第二天,問題通常很容易解決。我喜歡在睡夢中解決問題 - 它不需要「努力」,第二天你會覺得自己像個天才。 – Casper
@Casper我想我沒有指定「太長」需要在這裏和那裏工作幾個星期。 :/ – coreyward