ForEach: a face ca toate % dopar % să se comporte ca % dofuture % peste tot

URMĂREȘTE-NE
16,065FaniÎmi place
1,142CititoriConectați-vă

(Acest articol a fost publicat pentru prima dată pe Jottr pe rși a contribuit cu drag la R-Bloggers). (Puteți raporta problema despre conținutul de pe această pagină aici)


Doriți să vă împărtășiți conținutul pe R-Bloggers? Faceți clic aici dacă aveți un blog sau aici dacă nu.

Zidul balonului hexlogo „viitor”

viitor Pachetul sărbătorește zece ani pe CRAN din 19 iunie 2025. M -am oprit puțin de sărbători și m -am dus la fantasticul utilizator! Conferința 2025, dar, după cum a promis, aici este a treia dintr -o serie de postări pe blog care evidențiază îmbunătățiri recente la
futureverse Ecosistem.

dofutură 1.10.0 se află pe CRAN din mai 2025, urmată de două versiuni de tip Bug-Fix în iunie și iulie. Vine cu mai multe îmbunătățiri, dar aici aș dori să mă concentrez pe două noi caracteristici:

  1. registerDoFuture("%dofuture%")și

  2. with(doFuture::registerDoFuture("%dofuture%"), local = TRUE)

Transformă toate %dopar %în %dofuture %

Prin înregistrare

doFuture::registerDoFuture("%dofuture%")

Toate codul existent în scripturi și pachete care utilizează %dopar% de
prezice se va comporta ca și cum ar fi %dofuture% a fost folosit în schimb. Acesta poate fi un pas din

doFuture::registerDoFuture()

ceea ce spune într -adevăr %dopar% să se paraleleze prin cadrul viitor, dar %dofuture% este și mai bun – așa cum conturează în postarea mea de pe blog „%dofuture% – un operator de paralelizare () mai bun de la%dopar%”. De exemplu, folosind un explicit %dofuture%sau forțând -o prin intermediul doFuture::registerDoFuture("%dofuture%")rezultă în:

  • Mesajele, avertismentele și alte tipuri de condiții generate în paralel sunt transmise așa cum este indiferent de backend paralel. Acest lucru este valabil și pentru ieșirea standard produsă de print(), cat(),
    str()etc. Când utilizați Foreach fără Futureverse (de exemplu Doparalel), o astfel de ieșire se pierde în gol. În schimb, atunci când se folosește dofuturăfuncționează doar. Puteți utiliza și
    capture.output() şi withCallingHandlers() Așa cum ai face atunci când rulați lucrurile secvențial

  • Erorile generate în paralel sunt transmise așa cum este fără ca acestea să fie înfășurate în alte obiecte de eroare. Cu %dofuture% Se comportă așa cum te -ai aștepta, devine mai ușor să rezolvi erorile și erorile pot fi gestionate de tryCatch(). Acest lucru poate fi deosebit de util dacă utilizați codul care utilizează %dopar% Dar asta nu gestionează erorile

  • Dacă există probleme cu lucrătorii paraleli (de exemplu, se prăbușesc), se vor transmite mai multe mesaje de eroare informative, ceea ce ajută la rezolvarea problemei problemei de bază. Futureverse poate încerca, de asemenea, să relanseze lucrătorii paraleli prăbușiți, astfel încât să nu fie necesar să închideți totul făcut și să reporniți de la zero, ceea ce ar putea fi cazul altfel

  • Variabilele și pachetele globale necesare în sarcinile paralele sunt identificate automat și constant de către Futureverse, indiferent de care este utilizat backend paralel

În plus, este posibil să faceți:

  • Generarea paralelă a numărului aleatoriu (RNG) se face constant prin futureverse, de asemenea, când %dopar% este folosit și dezvoltatorul a uitat să folosească %dorng%

  • Obțineți actualizări de progres aproape în viață prin intermediul progresr Pachet, de asemenea când %dopar% este utilizat

Pentru dezvoltatorii de pachete

Dacă sunteți dezvoltator și apelați un alt pachet care utilizează foreach()
cu %dopar% pe plan intern, dar aș dori să folosească %dofuture%atunci puteți adăuga

with(doFuture::registerDoFuture("%dofuture%"), local = TRUE)

în partea de sus a funcției tale. Acest lucru va face temporar %dopar%
comportă -te ca %dofuture% În timp ce funcția dvs. este utilizată. De îndată ce funcția dvs. se va întoarce, adaptorul Foreach înregistrat temporar este anulat. Uşor!

Când să folosești?

Dacă găsești că unele prezice cod pe care nu îl puteți modifica, sau un pachet care îl folosește, eșuează, oferă erori greu de stârnit de rezolvare sau nu scoate mesaje și avertismente așteptate, apoi încercați cu

doFuture::registerDoFuture("%dofuture%")
# code or functions that call foreach(...) %dopar% { ... }

sau

with(doFuture::registerDoFuture("%dofuture%"), {
  # code or functions that call foreach(...) %dopar% { ... }
})

S -ar putea să vă rezolve problemele sau, cel puțin, să vă ajute să le restrângeți.

De asemenea, acest nou dofutură Funcția face parte din Fundația pentru o nouă caracteristică Futureverse de care sunt foarte încântat. Dar mai multe despre asta mai târziu …

Fie ca viitorul să fie cu tine!

Henrik

Dominic Botezariu
Dominic Botezariuhttps://www.noobz.ro/
Creator de site și redactor-șef.

Cele mai noi știri

Pe același subiect

LĂSAȚI UN MESAJ

Vă rugăm să introduceți comentariul dvs.!
Introduceți aici numele dvs.