2010-05-11 97 views
2

縮放Ruby腳本我想增加一個腳本,不淨I/O(刮刀)的吞吐量。我不想在ruby中使用多線程(我使用默認的1.9.1解釋器),而是想要啓動多個進程。那麼,是否有一個系統可以做到這一點,我可以跟蹤何時完成重新啓動,以便隨時都可以運行X號碼。也有一些將運行不同的命令參數。我正在考慮編寫一個bash腳本,但是如果在linux上已經存在一個這樣的方法,這聽起來像是一個不好的想法。通過啓動多個進程,而不是使用線程

回答

0

您可以

  1. 實現(或找到一個相當於創業板),一個線程池(ProcessPool,你的情況),或
  2. 準備所有的陣列,我們假設1000個待處理任務,拆分比如說10個100個任務(10個是你想要啓動的並行進程的數量),並啓動10個進程,其中每個進程立即接收100個任務進行處理。這樣,您不需要啓動1000個進程並控制其中不超過10個進程同時工作。
2

我建議不要分叉,而應該使用EventMachine(如果您使用HTTP,則使用優秀的em-http-request)。管理多個進程可能有點少,甚至比處理多個線程更多,但相比之下,走向平坦的路徑要簡單得多。由於你主要想做網絡IO,主要是等待,所以我認爲一個平衡的方法可以擴展,或者比分叉或線程更好。最重要的是:它將需要更少的代碼,並且它會更具可讀性。

即使您決定爲每個任務運行單獨的進程,EventMachine也可以幫助您編寫管理子進程的代碼,例如使用EventMachine.popen

最後,如果您想在沒有EventMachine的情況下執行此操作,請閱讀文檔IO.popen,Open3.popenOpen4.popen。所有的功能或多或少都是相同的,但可以讓您訪問子流程的stdin,stdout,stderr(Open3,Open4)和pid(Open4)。

相關問題