Follow

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use
Contact

How can I share a variable from a thread to my main in python?

I’m trying to share two variables for a comparation in a conditional in my main, but I am getting errors whenever I set the variables as global, saying that the variable was started before global statement.

Here is a peek to the code:

#thread timer for minute
class myMin(Thread):
    def run(self):
        global now
        global timestart
        n=1 
        while True:
            n=1
            timestart = time.time()
            now = time.time()
            while now-timestart <= 10:
                now = time.time()
            print('banana')
            n=0
#thread timer for the hour
class myHour(Thread):
    def run(self):
        global now2
        global timestart2
        m=1
        while True:
            m=1
            timestart2=time.time()
            now2 = time.time()
            while now2-timestart2 <= 20:
                now2 = time.time()
            print('uvas')
            m =0 

mymin=myMin()
myhour=myHour()

#thread execution
mymin.start()  

myhour.start() 

#Main program counting
while True:
    time.sleep(0.5)
    global m
    global n 
    count = count+1
    countperhour=countperhour+1
    countpermin=countpermin+1
    if m == 0:
        copm = countpermin
        countpermin=0
    if n == 0:
        coph=countperhour
        countpermin=0

MEDevel.com: Open-source for Healthcare and Education

Collecting and validating open-source software for healthcare, education, enterprise, development, medical imaging, medical records, and digital pathology.

Visit Medevel

>Solution :

You shouldn’t be declaring global m, n inside your loop.
There are other improvements that can be done to your code but below one runs

from threading import Thread
import time
#thread timer for minute
class myMin(Thread):
    def run(self):
        global now
        global timestart
        n=1
        while True:
            n=1
            timestart = time.time()
            now = time.time()
            while now-timestart <= 10:
                now = time.time()
            print('banana')
            n=0
#thread timer for the hour
class myHour(Thread):
    def run(self):
        global now2
        global timestart2
        m=1
        while True:
            m=1
            timestart2=time.time()
            now2 = time.time()
            while now2-timestart2 <= 20:
                now2 = time.time()
            print('uvas')
            m =0


count = 0
countperhour = 0
countpermin = 0

global m
global n
m, n = 0,0
mymin=myMin()
myhour=myHour()

#thread execution
mymin.start()

myhour.start()

#Main program counting
while True:
    time.sleep(0.5)
    count = count+1
    countperhour=countperhour+1
    countpermin=countpermin+1
    if m == 0:
        copm = countpermin
        countpermin=0
    if n == 0:
        coph=countperhour
        countpermin=0
Add a comment

Leave a Reply

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use

Discover more from Dev solutions

Subscribe now to keep reading and get access to the full archive.

Continue reading