如何限制写入频率到core.async通道?

7
有没有一种简单的方法来限制对core.async通道的写入频率?到目前为止,我发现了两个例子。一个使用滑动缓冲区和一些SetTimeout魔法来处理这个问题,另一个使用外部原子作为计数器。我本以为core.async可以直接提供这种功能。由于其中一个例子相当老(10个月),所以我想知道是否有更简单的解决方案?
我正在寻找适用于Clojure和ClojureScript的解决方案。

如果缓冲区已满,则将数据放入通道park。较小的缓冲区对您的使用情况不起作用吗? - A. Webb
1个回答

2
throttler lib” 提供了在 Clojure 代码上实施速率控制的函数(包括通道或函数的限流)。
从自述文件中可以看到:
(def in (chan 1))
(def slow-chan (throttle-chan in 1 :millisecond)) ; 1 msg/ms

(>!! in :token) ; => true
(<!! slow-chan) ; :token

这个库不支持ClojureScript。我编辑了我的问题,以使得明确支持Clojure和ClojureScript。 - rogergl
这样的回应有点软弱,因为那个小库看起来非常简单易懂,只需几行代码即可表达关键思想。 - A. Webb
然而,这可能是 Stack Overflow 的方式,将想法的核心复制到答案中(链接失效等等)。 - A. Webb
我现在正在使用来自https://gist.github.com/swannodette/5886048的示例。我的第一次尝试失败了。但现在它正在工作。 - rogergl

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