如何在clojure中生成n个线程

时间:2016-05-04 01:30:18

标签: multithreading clojure pmap

我想知道如何在clojure中创建n个线程。有一个名为“estimate-value”的函数,它可以估计一个值并返回结果。 现在我想使用pmap或pcalls创建n个线程,每个线程可以计算估计值,然后组合n个结果并返回最终估计值。 我的代码是

(defn compute-value [n]
    (/ (apply + (pmap (estimate-value) (range n))) n))

我确信函数估计值是真的。但是当我跑步并得到一个错误时:

user=> (compute-value 3)
ClassCastException java.lang.Double cannot be cast to clojure.lang.IFn  clojure.core/pmap/fn--6744/fn--6745 (core.clj:6729)

如何修复此计算值函数?谢谢!

1 个答案:

答案 0 :(得分:2)

除了一个小问题之外,您的代码似乎还不错,

(pmap (estimate-value) (range n))

这首先评估(estimate-value)一次,我假设返回double,然后它尝试将double用作pmap的函数,这是错误你看到java.lang.Double cannot be cast to clojure.lang.IFn

你只需将它包装在一个函数中,如下所示:

(pmap (fn[x](estimate-value)) (range n))
相关问题