Safe Haskell | None |
---|
A non-stripped pooling abstraction that restarts workers
Some got has been taken from Pool
by bos
- data WorkersPool w
- mkPool :: MonadIO (WMonad a) => (Int -> WMonad a (Worker a, RestartWorker IO a)) -> Int -> Int -> WMonad a (WorkersPool a)
- withWorker :: (MonadBaseControl IO m, MonadBase (WMonad a) m, MonadBaseControl IO (WMonad a), MonadIO (WMonad a)) => WorkersPool a -> ((Worker a, RestartWorker IO a) -> m b) -> m b
- takeWorker :: (MonadIO (WMonad a), MonadBaseControl IO (WMonad a)) => WorkersPool a -> WMonad a (Worker a, RestartWorker IO a)
- putWorker :: WorkersPool a -> (Worker a, RestartWorker IO a) -> IO ()
- destroyWorker :: WorkersPool a -> Worker a -> IO ()
Workers Pool
data WorkersPool w Source
A simple pool for workers. Workers are restarted from time to time
:: MonadIO (WMonad a) | |
=> (Int -> WMonad a (Worker a, RestartWorker IO a)) | An action that creates a new worker. Takes a unique number as an argument |
-> Int | Maximum number of workers in the pool |
-> Int | Restart rate (in seconds) |
-> WMonad a (WorkersPool a) |
Create a new workers pool
High-level operations on the pool
withWorker :: (MonadBaseControl IO m, MonadBase (WMonad a) m, MonadBaseControl IO (WMonad a), MonadIO (WMonad a)) => WorkersPool a -> ((Worker a, RestartWorker IO a) -> m b) -> m bSource
Like takeWorker
+ putWorker
but takes care of the exception handling for you
Low-level operations on the pool
takeWorker :: (MonadIO (WMonad a), MonadBaseControl IO (WMonad a)) => WorkersPool a -> WMonad a (Worker a, RestartWorker IO a)Source
Take worker from the pool.
The caller is responsible for putting the worker back into the pool
or destroying it with destroyWorker
putWorker :: WorkersPool a -> (Worker a, RestartWorker IO a) -> IO ()Source
Put the worker back in pool
destroyWorker :: WorkersPool a -> Worker a -> IO ()Source
Destroy a worker. Frees up space in the pool