Wie kann ich kodieren, um dieselbe Instanz einer "singletonischen" Klasse zwischen Prozessen zu teilen?
Antworten
Zu viele Anzeigen?Jeder andere Prozess, der Zugriff auf diese Instanz benötigt, erhält sie, indem er über eine Warteschlange (wie vom Multiprocessing-Modul bereitgestellt) oder andere IPC-Mechanismen zur Nachrichtenübermittlung Nachrichten an den besitzenden Prozess sendet und über ähnliche Mechanismen Antworten erhält.
Der Sinn von Prozessen ist es, unterschiedliche Adressräume zu haben. Wenn Sie Informationen zwischen Prozessen austauschen wollen, müssen Sie einige Mittel verwenden, um Interprozesskommunikation .
Ich glaube nicht, dass Sie die Instanz zwischen den Prozessen teilen können, aber Sie können die Instanz auf gemeinsamen Speicher zugreifen lassen: http://docs.python.org/library/multiprocessing.html#sharing-state-between-processes um seinen Zustand zu kontrollieren, wenn Sie das wirklich wollen.
Wie bereits in anderen Antworten erwähnt, könnte es jedoch einfacher sein, mit einer Warteschlange zu erreichen, was Sie wollen.
In Python 2.6 wird die multiprocessing
Modul hat eine Value
Objekt verwendet für gemeinsame Nutzung von Zuständen zwischen Prozessen . Sie haben ein Codebeispiel, das Ihnen eine Vorstellung davon vermittelt, wie man den Zustand auf diese Weise gemeinsam nutzt, und Sie können diesen Ansatz beim Schreiben einer Singleton-Klasse verwenden.
Sie können auch eine der multiprocessing.manager
gemeinsam nutzbare Datentypen
import multiprocessing as mp
manager = mp.Manager()
shared_list = manager.list()
def worker1(l):
l.append(1)
def worker2(l):
l.append(2)
process1 = mp.Process(target=worker1, args=[shared_list])
process2 = mp.Process(target=worker2, args=[shared_list])
process1.start()
process2.start()
process1.join()
process2.join()
print shared_list
würde die Ausgabe wie folgt aussehen:
[1, 2]
Es gibt eine Vielfalt der Datenstrukturen anbieten, aber Sie brauchen den übergeordneten Prozess, um das gemeinsame Objekt an die untergeordneten Objekte weiterzugeben.