2016-08-04 8 views
0

Ich benutze den foreach dopar ziemlich viel in R, um die Multi-Kerne zu nutzen, um die Dinge in Ad-hoc-Analysen in interaktiven Sitzungen zu beschleunigen.Wie foreach% dopar% zu stoppen, ohne die Sitzung zu verkomplizieren

Allerdings habe ich manchmal bemerkt, wenn ich aus den parallelisierten For-Schleifen ausbricht (normalerweise, wenn ich merke, dass ich etwas in den Worker-Threads falsch verstanden habe), indem ich Strg-C drücke, wird die Sitzung in dem Sinne durcheinander gebracht Ich benutze den foreach dopar wieder, die Dinge werden nur von einem Thread ausgeführt (oben würde nicht wie üblich mehrere Prozesse anzeigen, und die Arbeit wird ewig dauern, wenn die Parallelisierung funktioniert). Es passiert nicht auf jedem Control-c, aber häufig genug, um nervig zu sein (neuladen alles, was die Sitzung von einer brandneuen Sitzung hat kann ärgerlich sein)

Gibt es eine Möglichkeit, dies zu verhindern, oder zumindest ein Möglichkeit, die Umgebung zu reparieren, wenn es passiert?

Antwort

1

Der beste Weg ist, Ihre Cluster zu registrieren und dann eine Stop-Funktion zu erstellen, die automatisch die Kerne behandelt, wenn Sie den Prozess beenden.

myClusters <- makeCluster(4) #the number should reflect your system and project 
registerDoParallel(myClusters) 

und Sie so etwas wie

on.exit(stopCluster(myCluster)) 

verwenden können, wenn Sie es auf diese Art und Weise eingestellt, dann sollten Sie in Ordnung sein, wenn Ausfahrt. Sie können eine

gc() in der Konsole ausführen müssen die cruft raus ....

+0

Oh cool, ich ausgeführt wurden mit 'killall -u me' 2 Jahren – JustGettinStarted

Verwandte Themen