Clojure线程在map计算期间的休眠时间

8

我需要在Clojure中执行一段代码,如下所示:

    (map function coll)

然而,我需要延迟每个连续函数调用之间的时间间隔。也就是说,我想先使用第一个项目调用 function,然后休眠10秒钟,然后再使用第二个项目进行调用,以此类推。

如何实现这一目标?

提前感谢您的帮助。


4
这听起来你可能不应该在这里使用 map,因为它提供了一个分块序列,而你似乎实际上正在寻找与时间相关的副作用。坦率地说,当时间很重要时,我倾向于使用core.async;编写一个将通道读取与超时操作交替进行的 goroutine 将非常自然。 - Charles Duffy
5
你具体想要实现什么?如果你想对coll中的每个元素调用function来产生副作用,那么你可能希望使用doseq函数,在每次调用之间加上一个延迟。 - Diego Basch
好的,doseq 正是我正在寻找的。谢谢,Charles 和 Diego。 - Tony Duan
1个回答

14

为了完整起见,在评论中讨论后,这是一个使用doseq的实现,包装在一个简洁的小函数中:

(defn doseq-interval
  [f coll interval]
  (doseq [x coll]
    (Thread/sleep interval)
    (f x)))

这里是如何调用它的:

(doseq-interval prn (range 10) 1000)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接