Die Geschichte mit zwei Threads und einer globalen Variablen beginnen, die .. :) viel Zeit ändernPython globale Variable in einem Thread
Thema Nummer eins (der Einfachheit halber werden wir rufen t1) erzeugt eine Zufallszahl und speichern es in einer globalen Variable GLB.
Thread Nummer zwei (aka t2) überprüfen Sie den Wert der globalen Variablen und wenn es einen Wert erreicht beginnt seinen Wert bis zu einem bestimmten Zeitraum zu drucken.
ABER wenn t1 den Wert dieser globalen Variable ändert, ändern Sie auch den Wert innerhalb der Schleife und ich will das nicht!
Ich versuche Pseudo-Code zu schreiben:
import random
import time
import threading
GLB = [0,0]
#this is a thread
def t1():
while True:
GLB[0] = random.randint(0, 100)
GLB[1] = 1
print GLB
time.sleep(5)
#this is a thread
def t2():
while True:
if GLB[0]<=30:
static = GLB
for i in range(50):
print i," ",static
time.sleep(1)
a = threading.Thread(target=t1)
a.start()
b = threading.Thread(target=t2)
b.start()
while True:
time.sleep(1)
Die Frage ist: Warum variable statische Änderung für die innerhalb der Schleife? Es sollte konstant bleiben, es entkommt aus der Schleife! Konnte ich eine Sperre für die Variable erstellen? Oder gibt es eine andere Möglichkeit, das Problem zu lösen?
Vielen Dank.
'Static' sollte sich in dieser Schleife nicht ändern. Wie wäre es mit einem kleinen Arbeitsbeispiel, das wir testen könnten? – tdelaney
Ein Problem ist, dass sich "GLB" ändern kann, bevor Sie die Möglichkeit haben, "statisch" zuzuweisen. Sehen Sie das? – tdelaney
@AlejandroSazo 'static' ist eine neue Referenz auf das Objekt, so dass es nicht kopiert werden muss. Da es ein unveränderliches "int" ist, bekommt man sowieso keine Kopie. – tdelaney