pub struct ConcurrentRunner<Config> { /* private fields */ }Expand description
A runner to process files concurrently.
Implementations§
Source§impl<Config: 'static + Send + Sync> ConcurrentRunner<Config>
impl<Config: 'static + Send + Sync> ConcurrentRunner<Config>
Sourcepub fn new<ProcFiles>(num_jobs: usize, proc_files: ProcFiles) -> Self
pub fn new<ProcFiles>(num_jobs: usize, proc_files: ProcFiles) -> Self
Creates a new ConcurrentRunner.
-
num_jobs- Number of consumer threads, floored at 1 so0does not mean “no workers”.Before #1114 this was a budget shared with a dedicated producer thread, and
runspawnedmax(2, num_jobs) - 1consumers — one slot permanently reserved for a thread that finished almost immediately, costing ~1/N of throughput at--jobs auto. Dispatch now happens on the calling thread, so the whole count goes to consumers andnum_jobsmeans what it says. -
proc_files- Function that processes each file in the list.
Sourcepub fn without_path_verification(self) -> Self
pub fn without_path_verification(self) -> Self
Skip the per-path is_file() check during dispatch.
FilesData::paths is documented as a terminal file list, and
the default check is a safety net for a library caller who hands
in something else. A caller whose own traversal already
classified every entry — the bca CLI walk, which reads the kind
straight off the dirent — is paying one redundant stat per
file for a question it has already answered (#1114).
Opting out does not make a bad path unsafe: a path that is not a readable regular file still fails at the read in the worker, and that failure is reported through the same per-file error channel as any other unreadable input. It only moves where the run notices.
Sourcepub fn run(
self,
config: Config,
files_data: FilesData,
) -> Result<(), ConcurrentErrors>
pub fn run( self, config: Config, files_data: FilesData, ) -> Result<(), ConcurrentErrors>
Runs the producer-consumer pool over the terminal file list in
files_data. Each path is dispatched to a worker as a single
regular file; this runner performs no directory traversal or
glob filtering (the caller resolves and filters the file set —
see FilesData).
config- Information used to process a file.files_data- The resolved, terminal file list to process.
§Errors
Returns ConcurrentErrors::Thread when one of the num_jobs
consumer threads cannot be spawned via
std::thread::Builder::spawn;
ConcurrentErrors::Sender when a worker cannot place an
item (or the post-dispatch None poison-pill) on the channel;
ConcurrentErrors::Receiver when a consumer thread panics
and its join fails. Per-file processing errors raised by the
user-supplied callback are surfaced through the callback
itself, not through this Result.