haskell-throttle: A simple throttling library, which drops messages from same group.
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 suppliedaction
`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.
Downloads
- haskell-throttle-0.1.0.1.tar.gz [browse] (Cabal source package)
- Package description (as included in the package)
Maintainer's Corner
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] |