Mam listę możliwych wartości wejściowychScala Parallel Collections - jak wrócić wcześniej?
val inputValues = List(1,2,3,4,5)
mam naprawdę długo, aby funkcja, która daje mi wynik
def reallyLongFunction(input: Int) : Option[String] = { ..... }
Korzystanie Scala równoległe kolekcje obliczyć, mogę łatwo zrobić
inputValues.par.map(reallyLongFunction(_))
Aby uzyskać wszystkie wyniki, należy jednocześnie. Problem polega na tym, że tak naprawdę nie chcę wszystkich wyników, chcę tylko PIERWSZY wynik. Gdy tylko jedno z moich danych wejściowych zakończy się sukcesem, chcę uzyskać wyniki i chcę kontynuować moje życie. Zrobiło to dużo dodatkowej pracy.
Jak uzyskać najlepsze z obu światów? Chcę
- Get pierwszy wynik, który zwraca coś z mojej długiej funkcji
- zatrzymać wszystkie moje inne wątki od bezużytecznej pracy.
Edit - Rozwiązałem go jak niemy programista java poprzez
@volatile var done = false;
który jest ustawiony i sprawdzony w moim reallyLongFunction
. Działa to, ale nie czuje się bardzo scala. Chciałby lepszego sposobu, aby to zrobić ....
Notatka poboczna (nie jest to odpowiedź na pytanie): to jest IMHO prostsze: 'inputValues.par.map (reallyLongFunction)' –
Podobne: http://stackoverflow.com/questions/8073061/filtering-scalas-parallel- zbiory z wczesną przerwą, kiedy pożądana liczba r –
Nie przypomina to dla mnie równoległych kolekcji lub szkieletu łączenia widełek, które zostały zaprojektowane do obsługi tego przypadku. Jeśli obliczenia są długie, ponieważ wymagają dużej mocy obliczeniowej, wydaje się marnotrawstwem, aby chcieć obliczyć wszystkie wyniki lub podzielić obciążenie między rdzenie, a sprawdzenie, czy wszystkie rdzenie pracują nad obliczeniem wyniku. Jeśli obliczenia są długie, ponieważ czekają na jakieś OI, wydaje się, że przyszłość będzie bardziej odpowiednia. – huynhjl