2010-11-18 110 views
1

我想知道是否有可能在多臺機器上運行Perl中的線程。我正在集羣環境中工作,需要並行運行一些進程,但無法使用MPI。 如果線程無法跨機器使用,是否還有其他替代方案,我應該看看,這將允許我做類似的事情,而不需要特殊的模塊?Perl - 你可以在多臺機器上運行線程嗎?

+1

...爲什麼你會用這個perl?這聽起來像是這個工作的錯誤工具。 – 2010-11-18 02:32:36

+0

你看過PVM嗎? – tchrist 2010-11-18 13:29:19

回答

1

我在一週或兩週前偶然發現了GNU parallel,而沒有跨越單獨的機器,它允許常規程序利用多個內核來縮短時間。可以幫助加快你正在做的任何事情。

4

Perl中的線程(和分支)與父線程/進程綁定在同一臺計算機上,因此不需要跨計算機線程/分支。也就是說,您可以分別使用AnyEvent::MP/Coro::MP模塊,異步事件循環框架的消息傳遞擴展和協作線程框架的Coro協作線程框架,從而使您可以創建一個節點網絡,在一個或多個節點上執行不同的任務機器。詳情請參閱AnyEvent::MP::Intro。對於不需要特殊模塊的替代方案(我猜你的意思是說模塊不在Perl發行版中),你可以想象爲你的任務編寫一個守護進程,並讓它們通過TCP或UDP進行通信。除此之外的任何事情都可能需要至少一些未安裝Perl的模塊,但可從CPAN獲得。

+0

我曾經寫過一個'rfork($ hostname)'函數,但它有一大堆需求,當然包括目標機器是相同的硬件。但它確實正確,包括完美的'fork()'語義。不過,它在C中,不是Perl。 – tchrist 2010-11-18 13:28:45

+0

計劃9和一些BSD已經有了一個rfork函數(不是'遠程fork')。至於fork語義,不知道如何跨主機邊界共享文件描述符和指針,是否爲每個在兩個主機之間代理的rfork創建了一個真正的分支? – MkV 2010-11-18 18:00:48

2

看看Gearman,一個多機器作業管理器隊列。它確實需要特殊模塊;我在這裏回答「以防萬一」你實際上可以使用額外的模塊/基礎設施。

有Perl綁定,Gearman::XS,我成功地在項目中使用它,我希望在請求者或工作進程可能駐留在多臺機器上的環境中完成特定任務。也適用於一臺機器和一個請求者上的多個工作進程(例如:一個特定的網絡抓取工具,它要求任何工作人員解析頁面的所有鏈接,但希望保持對結果的控制)。

它的工作方式是創建一個「worker」Perl程序,該程序具有多個子程序,可執行您希望以分佈式方式執行的操作。您可以根據需要隨時隨地啓動這些工作程序,並將其連接到一個(或多個)主減速員「經理」。 然後,您創建一個請求者(gearman客戶端)Perl程序,它將執行請求。這也可以在任何機器上運行,並會聯繫主減速機經理要求完成一些工人的具體行動。任何工作人員都會這樣做,並且您的請求者會將結果返回。

如果您的請求者不需要返回結果,但「只」需要執行任務,請改爲查看TheSchwartz,該結構具有類似的體系結構,但不提供從工人獲取消息返回到請求者,IIRC。

1

Check GRID :: Machine。

相關問題