【问题标题】:How to limit write frequency to core.async channel?如何限制 core.async 通道的写入频率?
【发布时间】:2014-04-21 17:29:21
【问题描述】:

有没有一种简单的方法可以将写入频率限制到 core.async 通道?到目前为止,我可以找到两个例子。一个使用滑动缓冲区和一些 SetTimeout 魔法来处理这个问题,另一个使用外部原子作为计数器。我本来希望 core.async 开箱即用地提供这样的功能。由于其中一个示例相当陈旧(10 个月),我想知道是否有更简单的解决方案?

我正在寻找适用于 Clojure 和 ClojureScript 的解决方案。

【问题讨论】:

  • 如果缓冲区已满,则将频道停放。较小的缓冲区是否不适用于您的用例?

标签: clojure clojurescript


【解决方案1】:

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 和 Clojure。
  • 这是一种微弱的回应,因为这个小库看起来非常易于移植,并且仅用几行代码就表达了关键思想。
  • 尽管如此,将想法的内核复制到答案中可能是 Stack Overflow 方式(链接失效,yadda,yadda)。
  • 我现在使用来自gist.github.com/swannodette/5886048 的示例。我第一次尝试使用它失败了。但现在它正在工作。
猜你喜欢
  • 2014-03-20
  • 2012-09-10
  • 2015-07-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-04
相关资源
最近更新 更多