Slow -main function termination by pmap

129 views
Skip to first unread message

Jacek Grzebyta

unread,
Dec 19, 2017, 3:06:09 PM12/19/17
to clo...@googlegroups.com
Hi,

I have multi -mains project. Thus the execution looks like:

java -cp location/file.jar some.method ......


One -main method looks like:

(defn -main
  [& args]
  (let [validated (validate-args args)]
    (if (:msg validated)
      (println (st/join \newline (:msg validated)))
      (run validated))
    (log/debug "finish")))


There is nothing special in that except in the run time I have displayed the last log "finish" and the program termination is done after ~1 min later what is annoying. I found it is caused by deeply hidden pmap even if it is wrapped by doall. I thought after pmap returns results all threads are finished i.e. the main thread waits until all sub threads will be finished. If I am right what else can cause the delay? The threads pool manager?

Tanks a lot,
Jacek

Justin Smith

unread,
Dec 19, 2017, 3:08:09 PM12/19/17
to clo...@googlegroups.com
any Clojure program that uses the built in thread pools (future, agent, pmap, core.async, etc.) should call (shutdown-agents) if prompt exit is needed

--
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to clo...@googlegroups.com
Note that posts from new members are moderated - please be patient with your first post.
To unsubscribe from this group, send email to
clojure+u...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en
---
You received this message because you are subscribed to the Google Groups "Clojure" group.
To unsubscribe from this group and stop receiving emails from it, send an email to clojure+u...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Timothy Baldridge

unread,
Dec 19, 2017, 3:08:34 PM12/19/17
to clo...@googlegroups.com
Sometimes there's some weird interop with stuff like pmap and program termination. What happens if you end your program with this function: https://clojuredocs.org/clojure.core/shutdown-agents

--
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to clo...@googlegroups.com
Note that posts from new members are moderated - please be patient with your first post.
To unsubscribe from this group, send email to

For more options, visit this group at
http://groups.google.com/group/clojure?hl=en
---
You received this message because you are subscribed to the Google Groups "Clojure" group.
To unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscribe@googlegroups.com.

For more options, visit https://groups.google.com/d/optout.



--
“One of the main causes of the fall of the Roman Empire was that–lacking zero–they had no way to indicate successful termination of their C programs.”
(Robert Firth)

Jacek Grzebyta

unread,
Dec 19, 2017, 3:13:46 PM12/19/17
to clo...@googlegroups.com
That solved my problem! Thanks l lot!

Jacek

Mike

unread,
Dec 19, 2017, 4:15:38 PM12/19/17
to Clojure
last line in -main should be (System/exit 0) or (shutdown-agents).
1 min awaiting it is documented behaviour of clojure.

вторник, 19 декабря 2017 г., 23:08:09 UTC+3 пользователь Justin Smith написал:

Andy Fingerhut

unread,
Dec 19, 2017, 4:32:15 PM12/19/17
to clo...@googlegroups.com
Well, this behavior is documented _somewhere_, but not in the doc string or on clojure.org that I know of (happy to be corrected if I'm wrong there).

On the ClojureDoc.org web site, the docs for pmap: http://clojuredocs.org/clojure.core/pmap

suggest looking at the docs for future for info about a 1-minute wait and how to avoid it, where there are lots of details: http://clojuredocs.org/clojure.core/future

Andy


For more options, visit this group at
http://groups.google.com/group/clojure?hl=en
---
You received this message because you are subscribed to the Google Groups "Clojure" group.
To unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscribe@googlegroups.com.
Reply all
Reply to author
Forward
0 new messages