複数のマシン間でPerlでスレッドを実行することが可能かどうか疑問に思っていました。私はクラスター化された環境で作業していて、プロセスの一部を並列に実行する必要がありますが、MPIを使用できません。 マシン間でスレッディングを使用できない場合は、私が見なければならない他の選択肢がありますか?Perl - 複数のマシン間でスレッドを実行できますか?
答えて
1週間前または2日前にGNU parallel
に遭遇しましたが、別のマシンを経由するのではなく、通常のプログラムが複数のコアを利用できるようにすることで時間を短縮できます。あなたがしていることをスピードアップするのに役立ちます。
Perlのスレッド(およびフォーク)は、親スレッド/プロセスと同じコンピュータに結び付けられているため、コンピュータ間のスレッド/フォークはありません。つまり、には、非同期イベントループフレームワークのAnyEventへのメッセージ受け渡し拡張機能と、コルーチン、協調スレッド化フレームワークのそれぞれAnyEvent::MP/Coro::MPモジュールを使用して、1つまたは複数の異なるタスクを実行するノードのネットワークを作成できますマシン。詳細は、AnyEvent::MP::Introを参照してください。
特別なモジュール(これはperlディストリビューションに含まれていないモジュールを意味する)を必要としない代替手段としては、あなたのタスク用のデーモンを作成し、TCPまたはUDPで通信させることが考えられます。それ以外のものは、おそらく少なくともPerlでインストールされていないモジュールが少なくともいくつか必要ですが、CPANから入手できます。
私は 'rfork($ hostname)'関数を一度書きましたが、ターゲットマシンが同じハードウェアであることを含め、必要なものがたくさんあります。しかし、それは完璧な 'fork()'セマンティクスを含め、すべてのものを得ました。しかし、PerlではなくC言語で書かれていました。 – tchrist
Plan 9といくつかのBSDには既にrfork関数があります(ただし、 'remote fork'ではありません)。フォークセマンティクスに関しては、ホスト境界を越えてファイルディスクリプタとポインタをどのように共有するかは不明ですが、2つのホスト間でプロキシした各rforkに対して実際のフォークを作成しましたか? – MkV
マルチマシンジョブマネージャキューGearmanを見てください。 はに特別なモジュールが必要です。私はここで "ちょうどその場合"あなたは実際に追加のモジュール/インフラストラクチャを使用することができます答えた。
PerlバインディングGearman::XSがあります。リクエスタまたはワーカープロセスが複数のマシンに常駐する環境で特定のタスクを実行するプロジェクトでうまく使用できます。 1台のマシンと1台のリクエスタで複数のワーカープロセスにもうまく機能します(例:任意のワーカーが解析したページからすべてのリンクを要求し、結果を管理したい特定のWebスクレーパー)。
「作業者」のPerlプログラムを作成すると、分散して実行したいアクションを実行するいくつかのサブルーチンがあります。それらのワーカープログラムは、必要な数のマシンで実行し、1つ(または複数)のマスターギアマン「マネージャー」に接続させます。 次に、要求を実行するリクエスタ(ギヤマンクライアント)Perlプログラムを作成します。これはどのマシンでも実行でき、マスターギアマンマネージャーに連絡して、完了した多数の作業者の特定のアクションを要求します。どのワーカーもそれを行い、リクエスタは結果を返します。
リクエスタが結果を返す必要はありませんが、単にタスクを実行する必要がある場合は、同様のアーキテクチャを持ちますが、ワーカーからのメッセージをバックグラウンドに戻すための機能を提供していないTheSchwartzをご覧ください。リクエスタ、IIRC。
GRID :: Machineを確認してください。
- 1. 複数のマシン間で同期実行
- 2. 複数のマシンでF#エージェントを実行できますか?
- 3. 複数のマシン間で統合テストを実行する
- 4. 複数のPerlインストールを1台のマシンで実行するには?
- 5. md5を分割して複数のコア/スレッドを実行できますか?
- 6. Javaのスレッド内でスレッドを実行できますか?
- 7. マシン間でウェブページを簡単に複製できますか?
- 8. 他のスレッドが実行されていないときに複数のスレッドを実行しますか?
- 9. 制限数を持つ複数のスレッドで関数を実行
- 10. 複数のMySQLサーバを1台のマシンで実行
- 11. macからリモートWindowsマシンでpowershell.exeを実行できますか?
- 12. mysql-複数の値でINSERT IGNOREを実行できますか?
- 13. MS Accessでは、複数のクエリを実行できますか?
- 14. node.jsの複数のスレッドでタスクを実行する
- 15. 複数のマシンで開発するときにVSPackageを実行できません
- 16. Javaで複数のスレッドを実行する
- 17. 別のスレッドからメインスレッドでメソッドを実行できますか?
- 18. 並列で実行されている複数のスレッドで同じインスタンスを使用できますか?
- 19. TortoiseHgのコンソールで複数のコマンドを1行で実行できますか?
- 20. 複数のマシン間でdelayed_jobを使用して、ローカルで実行する必要のあるタスクがある
- 21. 複数のメインループを実行できますか?
- 22. なぜ複数のスレッドを同時に実行できる同期メソッド?
- 23. 同じAdobe AIRアプリケーションを複数回実行できますか?
- 24. UIスレッドでquartz.netジョブを実行できますか?
- 25. javascriptで複数のコールバック/スレッドに参加できますか?
- 26. 1つの物理マシン上で複数の 'big' Solr shardインスタンスを実行する
- 27. は複数の実行スレッドで同時に操作を開始します
- 28. Perlのファイル内のパターン間で複数の行を削除するには
- 29. WxPythonのGUIスレッドで関数を実行
- 30. boost :: asioでは、複数の実行時間で1つのdeadline_timerを使用できますか?
...なぜこのためにperlを使用しますか?それは仕事のための間違ったツールのように聞こえる。 –
あなたはPVMを見ましたか? – tchrist