module Lwt_pool:sig
..end
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
'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.