Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Passing variable changes between threads in Python functions [Beginner]

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!

like image 251
Matthew Avatar asked Mar 06 '13 17:03

Matthew


2 Answers

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()
like image 186
Diego Herranz Avatar answered Sep 25 '22 18:09

Diego Herranz


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
like image 38
Andreas Jung Avatar answered Sep 22 '22 18:09

Andreas Jung