2016-04-27 4 views
0

Ich habe das folgende Beispiel für ein größeres Stück Code gemacht, den ich schreibe. Ich möchte mehrere Prozesse verwalten 100 oder so Threads, die auch Klassen sind.Multi-Prozess-Klasse speichert keine Daten im eigentlichen Prozess

Ich habe zwei Probleme, eine ist, dass die "add" -Methode scheint nicht wirklich zu dem neuen Prozess hinzuzufügen. Der andere ist, dass, obwohl 2, 3 oder 4 Prozesse erstellt werden, die Threads immer noch unter dem ersten Hauptprozess gestartet werden.

Der folgende Code zeigt nicht die Thread-Klasse, aber vielleicht, wenn Sie helfen können zu erklären, warum der Prozess nicht richtig hinzufügen kann ich den Thread Teil herausfinden.

from time import sleep 
import multiprocessing 

class manager(multiprocessing.Process): 

    def __init__(self): 
     multiprocessing.Process.__init__(self) 
     self.symbols_list = [] 

    def run(self): 
     while True: 
      print "Process list: " + str(self.symbols_list) 
      sleep(5) 

    def add(self, symbol): 
     print "adding..." + str(symbol) 
     self.symbols_list.append(symbol) 
     print "after adding: " + str(self.symbols_list) 

if __name__ == "__main__": 
    m = manager() 
    m.start() 
    while True: 
     m.add("xyz") 
     raw_input() 

Die Ausgabe ist wie folgt:

adding...xyz 
after adding: ['xyz'] 
Process list: [] 

adding...xyz 
after adding: ['xyz', 'xyz'] 

adding...xyz 
after adding: ['xyz', 'xyz', 'xyz'] 
Process list: [] 

Antwort

0

Wenn Sie einen neuen Prozess erstellen, das Kind ein erbt die Speicher der Mutter aber es hat seine eigene Kopie.

Daher sind Änderungen an einem Prozess auf der anderen nicht sichtbar.

Um Daten innerhalb von Prozessen zu teilen, ist der am meisten empfohlene Ansatz ein Queue.

In Ihrem Fall möchten Sie vielleicht einen Blick auf how to share data within processes werfen. Beachten Sie, dass es etwas schwieriger ist, die Prozesse über Warteschlangen oder Pipes zu synchronisieren.

Verwandte Themen