2012-04-20 31 views
0

我建立一個系統,它利用作業列表紅寶石(RabbitMQ的,平行的寶石),排隊起來兔,然後有工人彈出工作從隊列執行他們。使用的RabbitMQ與運行多線程工作的工人 - 並行寶石

很容易讓工作人員在隊列準備就緒時將單個作業從隊列中彈出,但我希望讓每個工作人員運行5個線程,以便當所有5個線程正在處理時,該工作人員不會彈出任何工作不在隊列中。當一個線程變爲空閒時,工作人員從隊列中接受一個工作。

使用並行寶石,我看到創建多線程程序的唯一方法是使用下面的代碼。

results = Parallel.map(array, :in_processes => MAX_PROCESSES) do |item| 
item.process 
end 

我想這樣做

while true 
cur_threads = Parallel.get_cur_threads 
if cur_threads < MAX_PROCESSES 
    # get another job from queue 
    # allocate a thread for the job 
end 

任何想法?

回答

0

我知道這是真的老了,但我認爲你可能會得到你要尋找的使用work_queue寶石。