Search code examples
pythonmultithreadingglobal-variables

Using a global variable with a thread


How do I share a global variable with thread?

My Python code example is:

from threading import Thread
import time
a = 0  #global variable

def thread1(threadname):
    #read variable "a" modify by thread 2

def thread2(threadname):
    while 1:
        a += 1
        time.sleep(1)

thread1 = Thread( target=thread1, args=("Thread-1", ) )
thread2 = Thread( target=thread2, args=("Thread-2", ) )

thread1.join()
thread2.join()

I don't know how to get the two threads to share one variable.


Solution

  • You just need to declare a as a global in thread2, so that you aren't modifying an a that is local to that function.

    def thread2(threadname):
        global a
        while True:
            a += 1
            time.sleep(1)
    

    In thread1, you don't need to do anything special, as long as you don't try to modify the value of a (which would create a local variable that shadows the global one; use global a if you need to)>

    def thread1(threadname):
        #global a       # Optional if you treat a as read-only
        while a < 10:
            print a