2016-10-05 54 views

回答

2

你可以用它在一個函數,將執行映射,並呼籲後,一些回調函數:

user> (defn pmap-callback [callback f & colls] 
     (let [res (doall (apply pmap f colls))] 
      (callback res) 
      res)) 
#'user/pmap-callback 

user> (pmap-callback #(println "complete!" %) 
        + [1 2 3] [4 5 6]) 
;;=> complete! (5 7 9) 
(5 7 9) 
2

pmap文檔字符串:

像地圖,除了應用˚F在平行下。半懶,因爲並行計算保持超前消耗,但不會 實現整個結果,除非需要。只有在f的時間占主導地位的計算密集型功能中才有用。

因此,pmap結果將不會被完全計算,直到您要求結果序列的所有元素。與其他惰性序列一樣,您可以使用doall(如果您需要保留整個評估序列內容)或dorun(如果您只對由映射函數完成的副作用感興趣並且不需要評估的序列)。

要在計算完所有結果後執行函數,您可以在致電dorundoall後直接調用它。

還值得注意的是,pmap不是調度異步並行作業的工具,您可以在處理完成時收到通知。對於這種用例,Clojure core.async可能是更好的選擇。

相關問題