2010-11-18 18 views
1

複数のマシン間でPerlでスレッドを実行することが可能かどうか疑問に思っていました。私はクラスター化された環境で作業していて、プロセスの一部を並列に実行する必要がありますが、MPIを使用できません。 マシン間でスレッディングを使用できない場合は、私が見なければならない他の選択肢がありますか?Perl - 複数のマシン間でスレッドを実行できますか?

+1

...なぜこのためにperlを使用しますか?それは仕事のための間違ったツールのように聞こえる。 –

+0

あなたはPVMを見ましたか? – tchrist

答えて

1

1週間前または2日前にGNU parallelに遭遇しましたが、別のマシンを経由するのではなく、通常のプログラムが複数のコアを利用できるようにすることで時間を短縮できます。あなたがしていることをスピードアップするのに役立ちます。

4

Perlのスレッド(およびフォーク)は、親スレッド/プロセスと同じコンピュータに結び付けられているため、コンピュータ間のスレッド/フォークはありません。つまり、には、非同期イベントループフレームワークのAnyEventへのメッセージ受け渡し拡張機能と、コルーチン、協調スレッド化フレームワークのそれぞれAnyEvent::MP/Coro::MPモジュールを使用して、1つまたは複数の異なるタスクを実行するノードのネットワークを作成できますマシン。詳細は、AnyEvent::MP::Introを参照してください。

特別なモジュール(これはperlディストリビューションに含まれていないモジュールを意味する)を必要としない代替手段としては、あなたのタスク用のデーモンを作成し、TCPまたはUDPで通信させることが考えられます。それ以外のものは、おそらく少なくともPerlでインストールされていないモジュールが少なくともいくつか必要ですが、CPANから入手できます。

+0

私は 'rfork($ hostname)'関数を一度書きましたが、ターゲットマシンが同じハードウェアであることを含め、必要なものがたくさんあります。しかし、それは完璧な 'fork()'セマンティクスを含め、すべてのものを得ました。しかし、PerlではなくC言語で書かれていました。 – tchrist

+0

Plan 9といくつかのBSDには既にrfork関数があります(ただし、 'remote fork'ではありません)。フォークセマンティクスに関しては、ホスト境界を越えてファイルディスクリプタとポインタをどのように共有するかは不明ですが、2つのホスト間でプロキシした各rforkに対して実際のフォークを作成しましたか? – MkV

2

マルチマシンジョブマネージャキューGearmanを見てください。 に特別なモジュールが必要です。私はここで "ちょうどその場合"あなたは実際に追加のモジュール/インフラストラクチャを使用することができます答えた。

PerlバインディングGearman::XSがあります。リクエスタまたはワーカープロセスが複数のマシンに常駐する環境で特定のタスクを実行するプロジェクトでうまく使用できます。 1台のマシンと1台のリクエスタで複数のワーカープロセスにもうまく機能します(例:任意のワーカーが解析したページからすべてのリンクを要求し、結果を管理したい特定のWebスクレーパー)。

「作業者」のPerlプログラムを作成すると、分散して実行したいアクションを実行するいくつかのサブルーチンがあります。それらのワーカープログラムは、必要な数のマシンで実行し、1つ(または複数)のマスターギアマン「マネージャー」に接続させます。 次に、要求を実行するリクエスタ(ギヤマンクライアント)Perlプログラムを作成します。これはどのマシンでも実行でき、マスターギアマンマネージャーに連絡して、完了した多数の作業者の特定のアクションを要求します。どのワーカーもそれを行い、リクエスタは結果を返します。

リクエスタが結果を返す必要はありませんが、単にタスクを実行する必要がある場合は、同様のアーキテクチャを持ちますが、ワーカーからのメッセージをバックグラウンドに戻すための機能を提供していないTheSchwartzをご覧ください。リクエスタ、IIRC。

1

GRID :: Machineを確認してください。

関連する問題