gewusst wie: freigeben von globalen Variablen in threads in python?
Ich möchte zum Abschluss eine Schleife läuft in einem separaten thread über eine Globale variable. aber dieser code scheint nicht zu stoppen den thread in der Schleife. Ich erwarte, dass das Programm nicht drucken mehr '.' nach 2 Sekunden, aber es läuft noch auf unbestimmte Zeit.
Mache ich etwas grundlegend falsch hier?
import time
import threading
run = True
def foo():
while run:
print '.',
t1 = threading.Thread(target=foo)
t1.run()
time.sleep(2)
run = False
print 'run=False'
while True:
pass
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ausführung
foo()
auf der main-thread durch den Aufruft1.run()
. Rufen Siet1.start()
statt.Haben Sie zwei Definitionen von
foo()
- egal, aber sollte es nicht.Du nicht ein
sleep()
innerhalb der thread-Schleife (foo()). Das ist sehr schade, da es Schweine der Prozessor. Sie sollten zumindesttime.sleep(0)
(release time slice zu anderen threads), wenn es nicht noch ein bisschen schlafen.Hier ist ein funktionierendes Beispiel:
time.sleep(0)
verhindert, dass andere threads von der Ausführung aufgrund des Global Interpreter Lock?Sie nicht, starten Sie einen thread durch den Aufruf
run()
Sie starten ihn, indem Siestart()
.Die Festsetzung, dass machte es für mich arbeiten.
Zusätzlich zu den gegebenen Antworten ...
Die variable 'run' ist eine Globale variable.
Wenn Sie es ändern, die innerhalb einer anderen Funktion, z.B. innerhalb der main () - Funktion verwenden, müssen Sie die Referenz auf die variable als global, sonst wird Sie nicht Global geändert.