小编Kev*_*Zhu的帖子

在clojure中,(每个?pred coll)如果coll为空则返回true,这可能是设计缺陷吗?

从示例和对Clojuredoc的评论为每个功能

user> (every? true? '())    ;empty is true? 
true

user> (every? false? '())    ;empty is false? 
true
Run Code Online (Sandbox Code Playgroud)

这确实是奇怪的,可能是不合逻辑的,因为我认为上述两者都是假的.有人可以说明这背后的理由吗?

clojure

14
推荐指数
2
解决办法
771
查看次数

Clojure core.async,CPU在超时后挂起.无论如何要正确杀死(go ..)块产生的宏线程?

基于core.async遍历示例,我在下面创建了类似的代码,以使用多个通道处理一些CPU密集型作业,超时为10秒.但是在主线程返回后,CPU使用率仍然保持在700%左右(8台CPU机器).我必须在emacs中手动运行nrepl-close来关闭Java进程.

是否有任何正确的方法来杀死(go ..)块产生的宏线程?我试过了!每个陈,但它不起作用.我希望在主线程返回后确保Java进程将CPU使用率恢复为0.

(defn [] RETURNED-STR-FROM-SOME-CPU-INTENSE-JOB (do...   (str ...)))


(let [n 1000
      cs (repeatedly n chan)]
  (doseq [c cs] 
    (go 
     (>! c  (RETURNED-STR-FROM-SOME-CPU-INTENSE-JOB ))))

  (dotimes [i n]
    (let [[result source] (alts!!  (conj cs (timeout 10000))) ]  ;;wait for 10 seconds for each job
      (if  (list-contains? cs source)  ;;if returned chan belongs to cs 
        (prn "OK JOB FINISHED " result)
        (prn "JOB TIMEOUT")
        )))

 (doseq [i cs]
   (close! i))  ;;not useful for "killing" macro thread

 (prn "JOBS ARE DONE")) …
Run Code Online (Sandbox Code Playgroud)

multithreading asynchronous clojure core.async

7
推荐指数
1
解决办法
1881
查看次数

Clojure core.async,任何控制该(go ...)线程池中线程数的方法?

默认情况下(go ..)将使用两倍的核心数+ 42个 线程用于线程池.有什么办法可以通过设置环境变量或者sth设置线程数或代码可以使用的CPU数量吗?

在linux机器上,我可以使用taskset设置CPU的数量,例如 taskset -c 0,1 my_Java_or_Clojure_program,虽然taskset似乎对返回的数字没有效果(-> (java.lang.Runtime/getRuntime) .availableProcessors).

multithreading clojure cpu-usage core.async

6
推荐指数
2
解决办法
2859
查看次数

Clojure交换!不在let绑定中的map函数内部工作

我有两个序列用于比较,我需要在地图中保留比较结果,第一个序列中的数据用作键,第二个用作val.这是一个有效的示例代码

(def myAtom  (atom {}))

(map #(if (== %1 %2) (swap! myAtom assoc %1 %2 ))
              [1 2 3]   [4 5 3]) 

(prn @myAtom)  ; ==>  {3 3}
Run Code Online (Sandbox Code Playgroud)

然而,在将"相同"的东西放到一个let绑定之后,它就不再起作用了

(let  [ myAtom  (atom {})]    
  (map #(if (== %1 %2) (swap! myAtom assoc %1 %2 ))
              [1 2 3]   [4 5 3]) 
  (prn @myAtom)) ;;==> {} empty???
Run Code Online (Sandbox Code Playgroud)

所以问题是,myAtom里面发生了什么让绑定?怎么会丢失?

swap dictionary clojure let

2
推荐指数
1
解决办法
983
查看次数

在clojure中,为什么"某些"功能不能在集合上一致地工作?

对于下面,为什么最后一个返回零?功能"some"不适用于列表列表?

(some #(= % 1) '(1 3)     )  ; ==> true
(some #(= % '(1 3)) ['(1 3) '(1 2 3)]    )  ; ==> true
(some #(= % '(1 3)) '('(1 3) '(1 2 3))   )  ;==> nil 
Run Code Online (Sandbox Code Playgroud)

lisp list clojure

2
推荐指数
1
解决办法
129
查看次数