我正在尝试并行计算文件夹大小。
也许这是一种天真的做法。
我所做的是将每个分支节点(目录)的计算交给代理。
所有叶节点的文件大小都添加到 my-size 中。
好吧,这不起作用。 :)
“扫描”工作正常,连续。
'pscan' 仅打印第一级的文件。
(def agents (atom []))
(def my-size (atom 0))
(def root-dir (clojure.java.io/file "/"))
(defn scan [listing]
(doseq [f listing]
(if (.isDirectory f)
(scan (.listFiles f))
(swap! my-size #(+ % (.length f))))))
(defn pscan [listing]
(doseq [f listing]
(if (.isDirectory f)
(let [a (agent (.listFiles f))]
(do (swap! agents #(conj % a))
(send-off a pscan)
(println (.getName f))))
(swap! my-size #(+ % (.length f))))))
你知道我做错了什么吗?
Thanks.
不需要使用原子来保持状态。纯函数式:
(defn psize [f]
(if (.isDirectory f)
(apply + (pmap psize (.listFiles f)))
(.length f)))
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)