2012の16日目の記事です。Lispから使いたかったのですが、既存のものが見付からなかったのでcl-gearmanというものをつくってみました。いうわけで紹介、もとい宣伝をさせてもらおうと思います。Gearmanとは今更感はありますが、Gearman自体について簡単に説明しておきます。http://gearman.org/Gearmanとは時間のかかる処理を複数のコンピュータに振り分けるように設計されたオープンソースのアプリケーションフレームワークです。workerという3つの要素が存在します。それぞれの役割は以下の通りです。server間のプロトコルを抽象化したライブラリです。余談ですが、Gearmanはデータ永続化をしないものだとずっと思っていたのですがmysqlやsqliteに永続化できます。ジョブキューを使うなら以前はTheSchwartzという選択肢もありましたが、今はGearmanでほとんどの場合に対応できるのではないでしょうか。インストールまだquicklispに登録されていないので、githubからソースコードをダウンロードして下さい。serverにジョブを送信し、workerがそれを完了するまで待機します。workerが処理を完了するとその返り値が文字列で返されます。"foo)))hellofooNIL以下のようにしてバックグランドでジョブを実行することもできます。バックグランドでジョブを実行するとjobオブジェクトが即座に返されます。そのjobオブジェクトをつかって、ジョブのステータスを取得することができます。以下の例では見辛いですが、priorityを付けることでジョブの実行順を多少は制御できます。NAN)NILworkerworkerはadd-abilityで実行できるジョブとそのハンドラをあらかじめ登録する必要があります。ハンドラは2つの引数をとる関数で、第一引数はclientからのデータ、第二引数はjobオブジェクトです。返り値はprincでフォーマットした文字列としてclientに渡されます。workを実行するとジョブが割り当てられるまでブロックし、1つのジョブの実行が完了すると戻ります。Lispのコンディションシステムを使えば柔軟に対応できます。3パターンのリトライをサポートしています。worker))))のようにしておけば、エラーが発生したjobを無視することができます。abort-jobはclientに失敗を通知します。retry-jobは名前の通りハンドラを再度実行します。1.8-r15286Mffi系のライブラリには依存してないので比較的動かしやすいとは思いますが、動かなければ教えて下さい。まとめ以上、拙作のcl-gearmanを紹介しました。Lispを始めてまだ半年足らずなのでおかしいところがあるかと思いますが、フィードバックを頂けるとうれしいです。