Passing variable changes between threads in Python functions [Beginner]

11,530

Solution 1

bar is a global variable. You should put global bar inside example():

def example():
    global bar
    while True:
        time.sleep(5)
        bar = True
  • When reading a variable, it is first searched inside the function and if not found, outside. That's why it's not necessary to put global bar inside foo().
  • When a variable is assigned a value, it is done locally inside the function unless the global statement has been used. That's why it's necessary to put global bar inside example()

Solution 2

You must specify 'bar' as global variable. Otherwise 'bar' is only considered as a local variable.

def example():
    global bar
    while True:
        time.sleep(5)
        bar = True
Share:
11,530
Matthew
Author by

Matthew

Updated on June 11, 2022

Comments

  • Matthew
    Matthew almost 2 years

    So I have this code:

    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()
    

    I'm trying to understand why I can't get bar to = to true.. If so, then the other thread should see the change and write Success!