假設我有一個簡單的功能,像這樣: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)))
))
它通過一個ID爲呼叫URL,然後讓一個CGI腳本調用。 cgi腳本根據ID將文檔放入隊列中,然後等待處理完成。出於我的目的,等待過程完成的cgi調用部分只有通過瀏覽器訪問服務的用戶才感興趣。
因此,我想要做的就是啓動100個線程,等待足夠長的時間來運行cgi腳本的'將文檔放入隊列'階段,然後關閉這些線程(而不是坐在那裏等待完成),然後繼續下一批100行。沖洗並重復。
(shutdown-agents)似乎像system.exit一樣,它殺死了整個程序,甚至殺死了我的repl。
(未來取消)在單線程上工作,但我不知道如何取消一批線程。
任何見解,將不勝感激。
通常,cgi的返回部分將等待文檔轉換爲PDF並將其顯示在瀏覽器中。如果退出等待部分,後端進程仍然會將轉換後的文檔護送到「轉換後的文檔」文件管理器中供最終用戶使用,所以我不關心是否在後端等待每個文檔。我只是想劫持推送功能並退出。這是一個遺留系統,我們正在遷移,因此我們正在避免對現有代碼進行任何不必要的修改。每個文檔的前端可預測@〜10秒。我在等待20. –
我已經使用異步http調用和超時添加了一個可能的解決方案。 –
謝謝。我會考慮你提到的方法。 –