gpt4 book ai didi

clojure - leiningen run 在调用 future 后一分钟内不返回

转载 作者:行者123 更新时间:2023-12-03 21:47:20 25 4
gpt4 key购买 nike

如果我在将来包装一个函数并在命令行上从 leiningen 调用它,它会为运行时增加 1 分钟。谁能告诉我这是为什么?你能告诉我如何阻止这种行为吗?我想避免这额外的一分钟。

示例代码:

(ns futest.core
(:gen-class))

(defn testme []
(Thread/sleep 2000)
42)

(defn -main
[& args]
(if (= (nth args 0) "a")
;; either run a simple function that takes 2 seconds
(do
(println "no future sleep")
(let [t (testme)]
(println t))
(println "done."))
;; or run a simple function that takes 2 seconds as a future
(do
(println "future sleep")
(let [t (future (testme))]
(println @t))
(println "done.")
;; soo, why does it wait for 1 minute here?
)))

最佳答案

这是因为代理使用 two threadpools ,第一个是固定线程池,第二个是缓存线程池。缓存线程池终止在一定时间内处于非事件状态的正在运行的线程,the default being 60 seconds .这就是您看到 60 秒延迟的原因。当然,如果你手动调用shutdown-agents这两个线程池都会终止,不会留下阻止您退出的非守护线程。

关于clojure - leiningen run 在调用 future 后一分钟内不返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20037984/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com