を管理することは、私はそうのような単純な機能を持っていると仮定します。のClojure:個々のスレッド
(defn process-files
"Take file name and read data"
[file]
(let [data (slurp file)
rows (rest (c/parse-csv data))]
(doseq [row rows]
(future (call-url (nth row 3 nil)))
))
その後、CGIスクリプトへの呼び出しを行うれ、コールURLにIDを渡します。 cgiスクリプトは、IDに基づいて文書をキューに入れ、処理が完了するのを待ちます。私の目的のために、プロセスを完了するのを待つCGIコールの部分は、ブラウザを介してサービスにぶつかる誰かにとって興味深いだけです。
私がしたいのは、100スレッドをキックオフすることです。実行するcgiスクリプトの 'put document into queue'フェーズで十分待ってから、それらのスレッドをシャットダウンします完了するのを待って)、100行の次のバッチに進みます。すすぎ、繰り返します。
(shutdown-agents)は、プログラム全体を強制終了し、私のreplを殺すという点でsystem.exitのように動作するようです。
(future-cancel)は単一のスレッドで動作しますが、スレッドのバッチをキャンセルする方法がわかりません。
洞察が得られるでしょう。
通常、cgiの戻り部分は、ドキュメントがPDFに変換されるのを待ってブラウザに表示します。その待機部分が終了すると、バックエンドプロセスは、変換されたドキュメントをエンドユーザが消費するための「変換済みドキュメント」ファイラにエスコートするので、バックエンドで各ドキュメントを待つことには関係しません。私はプッシュ機能をハイジャックして終了したいだけです。私たちが離れていくレガシーシステムなので、既存のコードで不必要な修正を避けています。フロントエンドは1文書あたり約10秒です。私は待機しています。 –
私はasync httpコールとタイムアウトを使用して、可能な解決策を追加しました。 –
ありがとうございます。私があなたが言及したアプローチを検討します。 –