在Python中使用线程中的全局变量

时间:2012-04-18 03:12:36

标签: python global-variables python-multithreading

我处在这样一种情况,我想在一个循环中放入一个线程,这取决于在一个被调用的函数中被改变的变量。这就是我想要的。

error= 0

while( error = 0)
    run_thread = threading.Thread(target=self.run_test,args=(some arguments))

if ( error = 0)
    continue
else:
    break

现在运行测试调用一个函数说A和A调用B和B调用C。

def A()
      B()
def B()
     c()

def c()
    global error
    error = 1

这是我想要做的但是我无法解决这个问题。如果我尝试打印错误,我会在代码中出错。

有人可以帮我吗?

我是初学者,需要克服这个

1 个答案:

答案 0 :(得分:0)

error = False

def A():
      B()

def B():
     c()

def c():
    global error
    error = True

def run_test():
    while not error:
        A()
    print "Error!"

import threading
run_thread = threading.Thread(target=run_test,args=())
run_thread.start()

但是,最好是继承线程并重新实现run(),并使用异常:

def A():
    raise ValueError("Bad Value")

import threading
class StoppableThread(threading.Thread):
    def __init__(self, *args, **kwargs):
        self.stop = False

    def run(self):
        while not self.stop:
            A() #Will raise, which will stop the thread 'exceptionally'

    def stop(self): #Call from main thread, thread will eventually check this value and exit 'cleanly'
        self.stop = True