sig
  type t
  val invariant : Throttle.t -> unit
  val create :
    continue_on_error:bool -> max_concurrent_jobs:int -> Throttle.t
  type 'a outcome = [ `Aborted | `Ok of '| `Raised of exn ]
  module Job :
    sig
      type 'a t
      val create : (unit -> 'Deferred.t) -> 'Throttle.Job.t
      val result : 'Throttle.Job.t -> 'Throttle.outcome Deferred.t
    end
  val enqueue_job : Throttle.t -> 'Throttle.Job.t -> unit
  val enqueue' :
    Throttle.t -> (unit -> 'Deferred.t) -> 'Throttle.outcome Deferred.t
  val enqueue : Throttle.t -> (unit -> 'Deferred.t) -> 'Deferred.t
  val prior_jobs_done : Throttle.t -> unit Deferred.t
  val num_jobs_waiting_to_start : Throttle.t -> int
  module Sequencer :
    sig
      type 'a t
      val create : ?continue_on_error:bool -> '-> 'Throttle.Sequencer.t
      val enqueue :
        'Throttle.Sequencer.t -> ('-> 'Deferred.t) -> 'Deferred.t
      val num_jobs_waiting_to_start : 'Throttle.Sequencer.t -> int
    end
  val sexp_of_t : Throttle.t -> Sexplib.Sexp.t
  val ounit_tests : unit -> OUnit.test
end