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
insidefoo()
. - 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 putglobal bar
insideexample()
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
Author by
Matthew
Updated on June 11, 2022Comments
-
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=
totrue
.. If so, then the other thread should see the change and writeSuccess!