Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Time 惰性序列评估中的运行时间_Time_Clojure_Lazy Evaluation_Lazy Sequences - Fatal编程技术网

Time 惰性序列评估中的运行时间

Time 惰性序列评估中的运行时间,time,clojure,lazy-evaluation,lazy-sequences,Time,Clojure,Lazy Evaluation,Lazy Sequences,鉴于此代码: (reduce my-fun my-lazy-seq) 要测量整个操作的运行时间,请执行以下操作: (time (reduce my-fun my-lazy-seq)) ;;Elapsed time: 1000.1234 msecs 如何在完成之前的各个阶段测量此循环的运行时间?例如: Elapsed time to process next 1000 samples in my-lazy-seq: 100.1234 msecs Elapsed time to proce

鉴于此代码:

(reduce my-fun my-lazy-seq)
要测量整个操作的运行时间,请执行以下操作:

(time (reduce my-fun my-lazy-seq))  ;;Elapsed time: 1000.1234 msecs
如何在完成之前的各个阶段测量此循环的运行时间?例如:

Elapsed time to process next 1000 samples in my-lazy-seq: 100.1234 msecs  
Elapsed time to process next 1000 samples in my-lazy-seq: 99.1234 msecs  
Elapsed time to process next 1000 samples in my-lazy-seq: 101.1234 msecs  
...
这个怎么样:

(defn seq-counter [n coll]
  (let [t0 (System/currentTimeMillis)
        f (fn [i x]
            (let [i (inc i)]
              (if (= 0 (rem i n))
                (println i "items processed in" (- (System/currentTimeMillis) t0) "ms.")) 
              x))]
    (map-indexed f coll)))
地图索引
用于检查进度。上述功能将打印每个
n
元素的计数和处理时间

user=> (reduce + (seq-counter 10 (range 100)))
10 items processed in 0 ms.
20 items processed in 0 ms.
...
100 items processed in 1 ms.
4950

请参阅一个非常小的调整,因为
如果
只有一个分支,您可以在
时放入一个
,我认为解决方案是将延迟序列转换为大小为1000的批次的延迟序列,并将每个批次的处理时间。。。但我不知道如何以干净的方式完成第一步,因为源代码已经如此简单和优雅。
(doseq [thousand (partition 1000 my-lazy-seq)]
  (time (reduce my-fun thousand)))