haskell-throttle: A simple throttling library, which drops messages from same group.

[ agpl, concurrency, library ] [ Propose Tags ]

A throttle implementation using Control.Concurrent.STM.TChan.

Rationale

Current Haskell throttle implementations (e.g. Data.Conduit.Throttle or io-throttle) work by just slowing down incoming messages. However, sometimes we don't care about delivering all messages, but just want to limit their rate. Hence this module is born.

The main function is in Control.Concurrent.Throttle:

throttle :: (Ord id, Eq id, Show id) => Int -> TChan.TChan (id, a) -> (a -> IO ()) -> IO ()

It takes as arguments:

  • resolution (in milliseconds)

  • a `TChan` where `(id, a)` tuples are sent

  • `action` which, for given `a` calls some `IO` action

In the above we have 2 types:

  • `a` represents the incoming message which will be called with the supplied action

  • `id` represents some identifier associated with the message. By using this `id` we can perform grouping of messages and throttle them accordingly.

The `throttle` function itself should be spawned in a separate thread. It then awaits for incoming messages on the given TChan.

See test directory for a sample usage.

Design

Currently, the `throttle` function spawns a `mapCleaner` thread which, periodically, checks the internal `TVar` value for values to clean up and values to hold before the given delay happens.

Modules

[Index] [Quick Jump]

Downloads

Maintainer's Corner

Package maintainers

For package maintainers and hackage trustees

Candidates

  • No Candidates
Versions [RSS] 0.1.0.0, 0.1.0.1
Change log CHANGELOG.md
Dependencies async (>=2.2 && <2.3), base (>=4.17.2.0 && <4.18), containers (>=0.6 && <0.8), stm (>=2.5 && <2.6), time (>=1.14 && <2) [details]
License AGPL-3.0-or-later
Author Przemysław Kamiński
Maintainer pk@intrepidus.pl
Category Concurrency
Home page https://gitlab.iscpif.fr/gargantext/haskell-throttle
Bug tracker https://gitlab.iscpif.fr/gargantext/haskell-throttle/issues
Uploaded by cgenie at 2024-07-31T04:48:20Z
Distributions
Downloads 36 total (5 in the last 30 days)
Rating (no votes yet) [estimated by Bayesian average]
Your Rating
  • λ
  • λ
  • λ
Status Docs uploaded by user
Build status unknown [no reports yet]