2013-05-13 24 views
7

Đoạn mã này trả về ngay lập tức:Tại sao phương pháp chính đơn giản này không bao giờ trở lại khi chạy bởi leiningen?

user=> (dorun (pmap + [1 2] [3 4])) 
nil 

Tuy nhiên, khi tôi chạy cùng một mảnh mã trong phương pháp chính sử dụng Lein:

(ns practice.core) 

(defn -main [& args] 
    (dorun (pmap + [1 2] [3 4]))) 

tại sao nó không bao giờ trở lại?

Điều thú vị là, nếu tôi thay thế pmap theo map, nó sẽ trả về bình thường.

Trả lời

9

Bạn cần gọi số shutdown-agents ở cuối phương thức -main của mình.

(defn -main [& args] 
    (dorun (pmap + [1 2] [3 4])) 
    (shutdown-agents)) 

này được đề cập trên http://clojure.org/agents:

Lưu ý rằng việc sử dụng đại lý bắt đầu một thread pool nền phi daemon rằng sẽ ngăn chặn tắt máy của JVM. Sử dụng các tác nhân tắt máy để chấm dứt các chủ đề này và cho phép tắt máy.

pmap sử dụng tương lai chạy trên nhóm chủ đề đại lý.

Các vấn đề liên quan