2013-03-06 12 views
5

So habe ich diesen Code:Variablen an Änderungen zwischen Threads in Python Funktionen [Anfänger]

import time 
import threading 

bar = False 

def foo(): 
    while True: 
     if bar == True: 
      print "Success!" 
     else: 
      print "Not yet!" 
    time.sleep(1) 

def example(): 
    while True: 
     time.sleep(5) 
     bar = True 

t1 = threading.Thread(target=foo) 
t1.start() 

t2 = threading.Thread(target=example) 
t2.start() 

Ich versuche zu verstehen, warum ich nicht bar-= zu true bekommen .. Wenn ja, dann der andere Thread sollte die Änderung sehen und schreiben Success!

+0

zu setzen Die 'Bar' in den beiden Funktionen sind nicht im gleichen Umfang. Sie sollten sich mit Bereichen befassen, bevor Sie Multithreading lernen. In jedem Fall sollten gegenseitige Ressourcen-Konstrukte für Threads verwendet werden. –

+0

Einrückung in 'time.sleep (1)' ist falsch. Ich denke, es war beabsichtigt, innerhalb der While-Schleife zu sein. –

Antwort

1

Sie müssen "bar" als globale Variable angeben. Ansonsten wird 'bar' nur als lokale Variable betrachtet.

def example(): 
    global bar 
    while True: 
     time.sleep(5) 
     bar = True 
11

bar ist eine globale Variable. Sie setzen sollen global bar innen example():

def example(): 
    global bar 
    while True: 
     time.sleep(5) 
     bar = True 
  • Wenn eine Variable zu lesen, wird sie zunächst in der Funktion gesucht und wenn nicht, außerhalb gefunden. Deshalb ist es nicht notwendig, global bar innerhalb foo() zu setzen.
  • Wenn eine Variable einen Wert einen Wert zugewiesen hat, wird dies lokal in der Funktion ausgeführt, es sei denn, die global-Anweisung wurde verwendet. Deshalb ist es notwendig, global bar innerhalb example()
Verwandte Themen