什么会导致Clojure程序在完成main函数中的最后一个语句后不立即退出?
我所做的只是将a更改(doall (map ...))为a (doall (pmap ...)),突然程序在完成任务后会挂起很长时间才能退出.我会(println "Finished everything!")在-main函数的最后一行放一个,它会打印出来,但仍然没有退出一段时间.什么可能导致这种行为,我该如何解决它?
编辑:pmap是并行化程序的唯一部分(主要是因为其他所有东西都或多或少地立即运行).由于程序的后半部分需要pmap的所有结果才能正常运行,并且由于map和pmap的程序输出相同,我有点怀疑pmap在程序结束时仍会运行.放在(System/exit 0)最后而不是println也不会改变程序输出.
Sco*_*ott 17
pmap 将从线程池中启动多个线程来为您的并发任务提供服务.
调用shutdown-agents是必要的,以允许JVM以有序的方式退出,因为代理线程池中的线程不是守护程序线程.
您需要明确告诉他们正常关闭(但仅在程序完成时).这看起来已经在此之前得到了解答.
引用那个答案:
"你需要调用shutdown-agents来杀死支持pmap使用的线程池的线程."
文档在这里:http://clojuredocs.org/clojure_core/1.3.0/clojure.core/shutdown-agents