Python: Efektywne obejście dla wieloprocesorowej funkcji, która jest członkiem klasy klasy, z tej klasy
jestem swiadomyróżny dyskusje zograniczenia modułu przetwarzania wieloprocesorowego, gdy mamy do czynienia z funkcjami będącymi członkami danych klasy (z powodu problemów z Picklingiem).
Ale czy istnieje inny moduł lub jakikolwiek rodzaj obejścia w procesach wieloprocesorowych, który pozwala na coś podobnego do następującego (szczególnie bez wymuszania definicji funkcji, która ma być stosowana równolegle do istnienia poza klasą)?
class MyClass():
def __init__(self):
self.my_args = [1,2,3,4]
self.output = {}
def my_single_function(self, arg):
return arg**2
def my_parallelized_function(self):
# Use map or map_async to map my_single_function onto the
# list of self.my_args, and append the return values into
# self.output, using each arg in my_args as the key.
# The result should make self.output become
# {1:1, 2:4, 3:9, 4:16}
foo = MyClass()
foo.my_parallelized_function()
print foo.output
Uwaga: mogę to łatwo zrobić, przesuwającmy_single_function
poza klasą i przekazywanie czegoś podobnegofoo.my_args
domap
lubmap_async
polecenia. Ale to popycha równoległe wykonanie funkcji poza instancjamiMyClass
.
Dla mojej aplikacji (równolegle do zapytania o duże dane, które pobiera, łączy i czyści miesięczne przekroje danych, a następnie dołącza je do długiej serii czasowej takich przekrojów), bardzo ważne jest posiadanie tej funkcjiwewnątrz klasy ponieważ różni użytkownicy mojego programu utworzą różne instancje klasy z różnymi przedziałami czasu, różnymi przyrostami czasu, różnymi podzbiorami danych do zebrania itd., które powinny być powiązane z tą instancją.
Dlatego chcę, aby praca równoległa była również wykonywana przez instancję, ponieważ posiada ona wszystkie dane istotne dla zapytania równoległego i byłoby po prostu głupie, próbując napisać jakąś hackiczną funkcję opakowującą, która wiąże się z niektórymi argumentami i żyje poza klasa (zwłaszcza, że taka funkcja byłaby nie-ogólna. Potrzebowałaby wszystkich rodzajów szczegółów z wnętrza klasy).