2017-03-02 5 views
0

Ist der folgende Code korrekt? (Es initialisiert ein Objekt, das einen Thread in seinem Konstruktor startet, um seinen Zustand zu ändern).Klassenattribute zwischen Threads teilen

import threading 
import time 

class Test(): 

    def __init__(self): 

     self.a = False 

     def workload(): 
     self.a = True    

     self.thread = threading.Thread(target = workload) 
     self.thread.start() 

    def display(self): 
     print self.a 

test = Test() 

while True: 
    test.display() 
    time.sleep(0.1) 

Es gibt Wahre aber ich habe einen komplexere Testfall (das kann nicht einfach hier wiedergegeben werden) Workload tut viel komplexe Sachen (unter Einbeziehung schlafen, Gegenstände von einem Manager Queue Abrufen) und wo das Programm gibt nie True aus - obwohl sich der Wert self.a innerhalb der Workload-Funktion ändert. Erstellt Python temporäre Kopien von gemeinsamen Werten zwischen Haupt- und untergeordneten Threads und "synchronisiert" sich regelmäßig oder liegt das Problem an anderer Stelle?

Antwort

0

Sowohl der __main__ Prozess als auch der Thread def workload scheinen das gleiche Objekt zu verwenden.
Ich fügte time.sleep(0.1) vor self.a = True hinzu, um dem __main__ Prozess eine Chance zu geben, anzuzeigen False.
Ich bekomme folgende Ausgabe:

Start __main__ 
<__main__.Workload object at 0xf7027fac> <function Workload.__init__.<locals>.workload at 0xf7017c44> 
False 
<__main__.Workload object at 0xf7027fac> <function Workload.__init__.<locals>.workload at 0xf7017c44> 
False 
True 
True 
True 
EXIT __main__ 
Verwandte Themen