Warning: Reason support is experimental. We are looking for beta-tester and contributors.

Module Lwt_pool

module Lwt_pool : sig..end

External resource pools.

For example, instead of creating a new database connection each time you need one, keep a pool of opened connections and reuse ones that are free. The pool also provides a limit on the number of connections that can simultaneously be open.

Note that pools are not for keeping Lwt threads. Lwt threads are very cheap to create and are pure. It is neither desirable nor possible to reuse them. If you want to have a pool of system threads, consider module Lwt_preemptive.

type 'a t

Pools containing values of type 'a.

val create : 
  int ->
  ?check:('a -> (bool -> unit) -> unit) ->
  ?validate:('a -> bool Lwt.t) -> (unit -> 'a Lwt.t) -> 'a t

create n ?check ?validate f creates a new pool with at most n elements. f is the function to use to create a new element Elements are created on demand.

An element of the pool is validated by the optional validate function before its Lwt_pool.​use. Invalid elements are re-created.

The optional function check is called after a use of an element failed. It must call its argument exactly once with true if the element is still valid and false otherwise.

val use : 'a t -> ('a -> 'b Lwt.t) -> 'b Lwt.t

use p f takes one free element of the pool p and gives it to the function f. The element is put back into the pool after the thread created by f completes.