Mam proces, który chcę wykonać równolegle, ale nie udało mi się z powodu jakiegoś strange error. Teraz rozważam połączenie i obliczyć nieudane zadanie na głównym procesorze. Jednak nie wiem, jak napisać taką funkcję dla .combine.Budowanie funkcji dla domeny .com w foreach
Jak należy to zapisać?
Wiem, jak je napisać, na przykład odpowiedź this stanowi przykład, ale nie zapewnia sposobu radzenia sobie z nieudanymi zadaniami, ani powtarzania zadania na wzorzec.
chciałbym zrobić coś takiego:
foreach(i=1:100, .combine = function(x, y){tryCatch(?)} %dopar% {
long_process_which_fails_randomly(i)
}
Jednak, jak mogę używać wejścia tego zadania w funkcji .combine (jeśli można to zrobić)? Czy powinienem podać wewnątrz %dopar%
, aby zwrócić flagę lub listę, aby to obliczyć?
Dzięki za odpowiedź! Czy mógłbyś wyjaśnić, dlaczego masz ochotę powtórzyć równoległą pętlę, dopóki całe zadanie nie zostanie obliczone? Czy myślisz, że byłoby łatwiej/szybciej w ten sposób, ponieważ za każdym razem błąd występuje w innej iteracji? – Llopis
@Llopis Wszystko zależy od konkretnego problemu. Jeśli błąd nie może wystąpić na kapitanie, twoje podejście jest prawdopodobnie lepsze. Jeśli jest tak samo prawdopodobne, że stanie się to na mistrzu, równie dobrze możesz wykorzystać pracowników, ponieważ będzie to szybsze. Pisanie programów odpornych na błędy może być trudne, dlatego warto pomyśleć o różnych podejściach. –
No cóż, nie rozumiem pochodzenia błędu, trudno zgadnąć, ale dzięki za dostarczenie alternatyw – Llopis