Module Rpc_parallel.Parallel
include Rpc_parallel__.Parallel_intf.Parallel
module type Worker = Rpc_parallel__.Parallel_intf.Worker with type ('w, 'q, 'r) _function := ('w, 'q, 'r) Function.tmodule type Functions = Rpc_parallel__.Parallel_intf.Functionsmodule type Creator = Rpc_parallel__.Parallel_intf.Creator with type ('w, 'q, 'r) _function := ('w, 'q, 'r) Function.t and type ('w, 'q, 'r) _direct := ('w, 'q, 'r) Function.Direct_pipe.tmodule type Worker_spec = Rpc_parallel__.Parallel_intf.Worker_spec with type ('w, 'q, 'r) _function := ('w, 'q, 'r) Function.t and type ('w, 'q, 'r) _direct := ('w, 'q, 'r) Function.Direct_pipe.tmodule Make : functor (S : Worker_spec) -> Worker with type 'a functions := 'a S.functions and type worker_state_init_arg := S.Worker_state.init_arg and type connection_state_init_arg := S.Connection_state.init_argmodule Worker = Make(T)
val start_app : ?rpc_max_message_size:int -> ?rpc_handshake_timeout:Core.Time.Span.t -> ?rpc_heartbeat_config:Async.Rpc.Connection.Heartbeat_config.t -> Async.Command.t -> unitstart_app commandshould be called from the top-level in order to start the parallel application. This function will parse certain environment variables and determine whether to start as a master or a worker.rpc_max_message_size,rpc_handshake_timeout,rpc_heartbeat_configcan be used to alter the rpc defaults. These rpc settings will be used for all connections. This can be useful if you have long async jobs.
module State : sig ... endUse
State.getto query whether the current process has been initialized as an rpc parallel master (start_apporinit_master_exnhas been called). We return aState.trather than aboolso that you can require evidence at the type level. If you want to certify, as a precondition, for some function thatstart_appwas used, require aState.tas an argument. If you don't need theState.tanymore, just pattern match on it.
module For_testing : sig ... endmodule Expert : sig ... endIf you want more direct control over your executable, you can use the
Expertmodule instead ofstart_app. If you useExpert, you are responsible for starting the master and worker rpc servers.worker_command_argswill be the arguments sent to each spawned worker. Running your executable with these args must follow a code path that callsworker_init_before_async_exnand thenstart_worker_server_exn. An easy way to do this is to useworker_command.