Python: Effiziente Problemumgehung für die Mehrfachverarbeitung einer Funktion, die ein Datenelement einer Klasse ist, aus dieser Klasse heraus

Ich bin mir bewusst überverschiedene Diskussionen vonEinschränkungen des Multiprocessing-Moduls beim Umgang mit Funktionen, die Datenelemente einer Klasse sind (aufgrund von Beizproblemen).

Aber gibt es ein anderes Modul oder irgendeine Art von Umgehung bei der Mehrfachverarbeitung, die es ermöglicht, dass etwas Spezielles wie das Folgende angewendet wird (insbesondere ohne die Definition der Funktion zu erzwingen, die parallel angewendet wird, um außerhalb der Klasse zu existieren)?

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

Hinweis: Ich kann dies leicht durch Bewegen tunmy_single_function außerhalb der Klasse, und etwas wie vorbeifoo.my_args zummap odermap_async befehle. Dies verschiebt jedoch die parallelisierte Ausführung der Funktion außerhalb von Instanzen vonMyClass.

Für meine Anwendung (Parallelisierung einer großen Datenabfrage, die monatliche Datenquerschnitte abruft, verknüpft und bereinigt und diese dann zu einer langen Zeitreihe solcher Querschnitte anfügt) ist es sehr wichtig, über diese Funktionalität zu verfügenin der Klasse Da verschiedene Benutzer meines Programms verschiedene Instanzen der Klasse mit unterschiedlichen Zeitintervallen, unterschiedlichen Zeitinkrementen, unterschiedlichen zu sammelnden Datensätzen usw. instanziieren, sollten alle mit dieser Instanz verknüpft sein.

Daher möchte ich, dass die Parallelisierung auch von der Instanz ausgeführt wird, da sie alle Daten besitzt, die für die parallelisierte Abfrage relevant sind, und es einfach albern wäre, eine Hacky-Wrapper-Funktion zu schreiben, die an einige Argumente gebunden ist und außerhalb von lebt die Klasse (Zumal eine solche Funktion nicht allgemein sein würde. Sie würde alle Arten von Einzelheiten innerhalb der Klasse benötigen.)

Antworten auf die Frage(3)

Ihre Antwort auf die Frage