1
0
mirror of https://github.com/bobwen-dev/hunter synced 2025-04-12 00:55:41 +02:00

process files in parallel

This commit is contained in:
rabite 2020-01-27 19:14:55 +01:00
parent c8e6ea51bb
commit 025a40044c
2 changed files with 22 additions and 18 deletions

View File

@ -20,9 +20,10 @@ use failure::Error;
use rayon::{ThreadPool, ThreadPoolBuilder}; use rayon::{ThreadPool, ThreadPoolBuilder};
use alphanumeric_sort::compare_str; use alphanumeric_sort::compare_str;
use mime_guess; use mime_guess;
use rayon::prelude::*;
use pathbuftools::PathBufTools; use pathbuftools::PathBufTools;
use async_value::{Async, Stale}; use async_value::{Async, Stale, StopIter};
use crate::fail::{HResult, HError, ErrorLog}; use crate::fail::{HResult, HError, ErrorLog};
use crate::dirty::{AsyncDirtyBit, DirtyBit, Dirtyable}; use crate::dirty::{AsyncDirtyBit, DirtyBit, Dirtyable};
@ -339,17 +340,13 @@ impl Files {
let files: Vec<_> = direntries? let files: Vec<_> = direntries?
.into_iter() .into_iter()
.stop_stale(stale.clone())
.par_bridge()
.map(|file| { .map(|file| {
if stale.is_stale().ok()? { let file = File::new_from_direntry(file,
None Some(dirty_meta.clone()));
} else { file
let file = File::new_from_direntry(file,
Some(dirty_meta.clone()));
Some(file)
}
}) })
.fuse()
.flatten()
.collect(); .collect();
if stale.is_stale()? { if stale.is_stale()? {
@ -620,16 +617,21 @@ impl Files {
} }
pub fn meta_all_sync(&mut self) -> HResult<()> { pub fn meta_all_sync(&mut self) -> HResult<()> {
let mut same = true; let same = Mutex::new(true);
for file in self.iter_files_mut() { self.iter_files_mut()
if !file.meta_processed { .par_bridge()
file.meta_sync().log(); .for_each(|f| {
same = false; if !f.meta_processed {
} f.meta_sync().log();
} same.lock()
.map(|mut t| *t = false)
.map_err(HError::from)
.log();
}
});
if !same { if !*same.lock()? {
self.set_dirty(); self.set_dirty();
} }

View File

@ -3,6 +3,7 @@ use std::path::{Path, PathBuf};
use termion::event::Key; use termion::event::Key;
use unicode_width::UnicodeWidthStr; use unicode_width::UnicodeWidthStr;
use rayon::prelude::*;
use async_value::{Stale, StopIter}; use async_value::{Stale, StopIter};
@ -352,6 +353,7 @@ impl FileListBuilder {
.iter_files_mut() .iter_files_mut()
.skip(from) .skip(from)
.take(upto) .take(upto)
.par_bridge()
.for_each(|f| f.meta_sync().log()); .for_each(|f| f.meta_sync().log());
view.content.meta_upto = Some(view.content.len); view.content.meta_upto = Some(view.content.len);