module Lwt_preemptive : sig..end
This module allows to mix preemptive threads with Lwt cooperative threads. It maintains an extensible pool of preemptive threads to which you can detach computations.
When compiling or linking programs that use Lwt_preemptive, you should pass the -thread or -vmthread option. This depends on your build system. For OCamlbuild, add true: thread to _tags. For OASIS, add threads to BuildDepends in _oasis.
val detach : ('a -> 'b) -> 'a -> 'b Lwt.t
detach f x runs the computation f x in a separate preemptive thread. detach evaluates to an Lwt promise, which is pending until the preemptive thread completes.
detach calls Lwt_preemptive.simple_init internally, which means that the number of preemptive threads is capped by default at four. If you would like a higher limit, call Lwt_preemptive.init or Lwt_preemptive.set_bounds directly.
Note that Lwt thread-local storage (i.e., Lwt.with_value) cannot be safely used from within f. The same goes for most of the rest of Lwt. If you need to run an Lwt thread in f, use Lwt_preemptive.run_in_main.
val run_in_main : (unit -> 'a Lwt.t) -> 'a
run_in_main f can be called from a detached computation to execute f () in the main preemptive thread, i.e. the one executing Lwt_main.run. run_in_main f blocks until f () completes, then returns its result. If f () raises an exception, run_in_main f raises the same exception.
val init : int -> int -> (string -> unit) -> unit
init min max log initialises this module. i.e. it launches the minimum number of preemptive threads and starts the dispatcher.
val simple_init : unit -> unit
simple_init () checks if the library is not yet initialized, and if not, does a simple initialization. The minimum number of threads is set to zero, maximum to four, and the log function is left unchanged, i.e. the default built-in logging function is used. See Lwt_preemptive.init.
Note: this function is automatically called by Lwt_preemptive.detach.
val get_bounds : unit -> int * int
get_bounds () returns the minimum and the maximum number of preemptive threads.
val set_bounds : int * int -> unit
set_bounds (min, max) set the minimum and the maximum number of preemptive threads.
val set_max_number_of_threads_queued : int -> unit
Sets the size of the waiting queue, if no more preemptive threads are available. When the queue is full, Lwt_preemptive.detach will sleep until a thread is available.
val get_max_number_of_threads_queued : unit -> int
Returns the size of the waiting queue, if no more threads are available