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).

questionAnswers(3)

yourAnswerToTheQuestion