2016-12-06 2 views
1

バックグラウンドジョブ処理のソリューションが必要です。ワーカーが異なるマシン上のリモートプロセスになることができるタスクキュー。Common Lispのバックグラウンドジョブ処理にはどのソリューションがありますか?

私はインターネットで検索しましたが、アルファにあり、生産には推奨されていないPsychiqしか見つかりませんでした。

私は、Common Lispのような成熟した言語には他の解決策はないと信じていません。

どこにありますか?

更新

考えられる解決策:

  • lfarm(@coredumpによって提案されました)。
  • cl-gearmanを使用しているクライアント/ワーカーのギアマン(別のGoogleセッションでは自分自身で見つけました)。
+0

POSIXシステムコールにいくつかのインターフェイスが必要です。それらはCommon Lispでは標準化されていませんが、ほとんどのCL実装(例:[SBCL](http://sbcl.org/)....)は優れています。 [SBCL extensions](http://sbcl.org/manual/index.html#Extensions)の章とその 'sb-ext'と' sb-posix'モジュールを参照してください。 –

+0

@BasileStarynkevitchいいえ、私はキューにタスクを入れて、別のマシンでこのタスクを処理できるようにしたいと思います。 –

+0

私は[cl-async](http://orthecreedence.github.io/cl-async/)を提案しようとしていましたが、リモートマシンでの実行に関するあなたのコメントはそれを排除していると思います。あなたはおそらくそれをあなたの質問に加えるべきです。 –

答えて

4

私は、これはあなたが後にしている正確に何ですが、LFARMは良い候補であるかもしれないかどうかわからないです:

lfarmは、リモート・プロセスとワーカースレッドを置き換えるlparallelの分散バージョンです。たとえば、lfarm:pmapは入力シーケンスを細分し、マッピングのためにパーツをリモートマシンに送信し、結果を結合します。同様に、lfarm:futureは、リモートタスクの実行を約束のメタファーで包みます。 lparallelカーネルAPIのほとんどは、小さなバリエーションで保持されます。

github repositoryにはいくつかの例があります。

Erlangenも参照してください。ネイティブスレッドに基づいたErlangのようなアプローチです。

Erlangenは、Clozure Common Lispに分散型の非同期メッセージを渡します。メッセージパッシングを使用してClozure CLプロセス(ネイティブスレッド)を編成し、スーパービジョンツリーを使用してフォールトトレラントなソフトウェアアーキテクチャを促進します。透過的に配布され、すべての機能がIPネットワーク上でシームレスに動作します。したがって、異なるホスト上の複数のClozure CLインスタンス間でアプリケーションを構築するために使用できます。 ErlangenはErlang/OTPから多くのアイデアを借りています。 (その町!)

+0

うわー、それは面白そうだ、私はそれをさらに調査しなければならない。 –

関連する問題