私はチャネルのパイプラインであるclojure処理アプリケーションを持っています。各処理ステップは、その計算を非同期的に行います(つまり、http-kitなどを使用してhttp要求を行います)。結果は出力チャネルに入れます。このようにして、次のステップはそのチャネルから読み込み、その計算を行うことができます。プロセスのclojure core.asyncパイプラインをシャットダウンする方法
私の主な機能は、この
(defn -main [args]
(-> file/tmp-dir
(schedule/scheduler)
(search/searcher)
(process/resultprocessor)
(buy/buyer)
(report/reporter)))
のように見える現在、スケジューラのステップは、(それが入力チャンネルを持っていない)のパイプラインを駆動し、ワークロードにチェーンを提供します。
私はREPLでこれを実行する場合:
(-main "some args")
それは基本的に起因するスケジューラの無限に永遠に実行されます。 REPLからシステム全体をシャットダウンできるように、このアーキテクチャを変更する最善の方法は何ですか?各チャンネルを閉じることは、システムが終了することを意味するか?
一部のブロードキャストチャンネルは役に立ちますか?その後、ループを終了しますkill-channel
に価値を置く
(def kill-channel (async/chan))
(defn scheduler [input output-ch kill-ch]
(loop []
(let [[v p] (async/alts!! [kill-ch [out-ch (preprocess input)]]
:priority true)]
(if-not (= p kill-ch)
(recur))))
:
'(システム/終了0)'? – Bill
それも残念ながらREPLを殺します。私はComponentアプローチを試みます –