Aktywne Wpisy
KRZYSZTOF_DZONG_UN +762
Smutłem... to nie jest kraj dla mężczyzn... (╯︵╰,)
#pieklomezczyzn #blackpill #polska #logikarozowychpaskow #logikaniebieskichpaskow #p0lka
#pieklomezczyzn #blackpill #polska #logikarozowychpaskow #logikaniebieskichpaskow #p0lka
Szrupka +203
Hejka, czy na wypoku oprócz kitku szanuje się też szczurki?(。◕‿‿◕。)
#szczury #szczuryposting #zwierzaczki #smiesznypiesek
#szczury #szczuryposting #zwierzaczki #smiesznypiesek
Dopiero zaczynam przygodę z wątkami i chcę wrzucić cześć kodu do wątków aby go mocno przyspieszyć(za pomocą Rayon).
Stworzyłem póki co taki kod(który oczywiście się nie kompiluje)
self.imagestocheck.paritermut().map(|fileentry| {
let image = match image::open(fileentry.path.clone()) {
Ok(t) => t,
Err() => return, // Something is wrong with image
};
let dimensions = image.dimensions();
fileentry.dimensions = format!("{}x{}", dimensions.0, dimensions.1);
let hasher = HasherConfig::withbytestype::<[u8; 8]>().tohasher();
let hash = hasher.hashimage(ℑ);
let mut buf = [0u8; 8];
buf.copyfromslice(&hash.asbytes());
self.bktree.add(buf);
self.imagehashes.entry(buf).orinsertwith(Vec::::new);
self.imagehashes.getmut(&buf).unwrap().push(fileentry.clone());
});
Pastebin - https://pastebin.com/t8uRANEg
Problemem, jak pewnie na pierwszy rzut oka jest wiadome, jest użycie
self
wewnątrz domknięcia, przez co wywala dwa błędy -error[E0500]: closure requires unique access to
self
but it is already borrowedoraz
error[E0596]: cannot borrow
self.image_hashes
as mutable, asFn
closures cannot mutate their captured variablesW jaki sposób powinienem taką sytuację obsłużyć?
Jest jakiś prosty, dobry i aktualny poradnik do biblioteki Rayon?
#rustlang #programowanie #naukaprogramowania
1. w map() zwracać buf
2. zrobić collect() do Vec<>
3. W funkcji wyżej iterować i przekazać do struktur self.kbtree i self.image_hahses
tak jak w tym przykładzie: https://github.com/rayon-rs/rayon/issues/210#issuecomment-551319338
Z innego wątku przekazuję sygnał wyłączenia, ale nie wiem jak go obsłużyć w Rayon.
Potrzebuję jak najszybciej, przerywając wątki lub czekając na ich zakończenie(nie wszystkich, tylko tych uruchomionych)
To zwracane przez funkcję bool określa czy funkcja została przerwana(false) czy też nie(true)
fn sortimages(&mut self, stopreceiver: Option<&Receiver<()>>) -> bool {
let hashmapmodification = SystemTime::now();
let vec
filter_map
użyćmap
i skorzystać zwhile_some
https://docs.rs/rayon/1.5.0/rayon/iter/trait.ParallelIterator.html#method.while_somewhile_some
działa dobrze, ale z tego co widzę to tylko przerywa wykonywanie danych wątków.Czy jest możliwe przy jej użyciu wyjście z zewnętrznej funkcji?
Nie widzę póki co żadnej metody na określenie czy wątki zostały przerwane przez użytkownika(funkcja
while_some
przerwała to) czy wszystkie zakończyły się poprawnie same.AtomicBool
i ustawiaj ją wmap
gdy użytkownik przerwie operację