日曜プログラミング

休日趣味でやってるプログラミング関連記事をダラダラと

Clojure の future は shutdown-agent と一緒に使うべし

Clojure には気軽に別スレッドに処理を投げて結果をもらう事ができる関数として future があるんだけど
、これ future の処理が正常終了しててプログラム終わらせようとしてもしばらく終わらない事がある。自分が使った時がプログラムが終わるまで 1~2 分かかった。

future を使用した Clojure プログラムをすぐ終わらせたい場合は shutdown-agent を使うと良い。但しこれが実行された後 agentが(futureも?)使えなくなるので使う場合はプログラムのエンドポイントで 1 回だけ呼ぶようにする事。

future を内部的に使用してる pmap や clojure.java.shell/sh を使う場合も同様の注意が必要。

と言う事は Clojure Docs にも既に書かれていて、JIRA にも上がっているみたいなんだが、日本で遭遇したってのを見かけなかったので一応小ネタとして記事に上げておく。

流れはちゃんと読んでないのでどう進んでいるかについては書けないが、少なくともまだ対応はされてない。
また、restart-agentと言うのもあるみたいだが使い方は良く分からない。