如何在python中跨线程维护全局变量?

时间:2016-12-15 11:05:42

标签: python multithreading global-variables

我的项目中有以下结构。

file1.py

def run_tasks_threads():
    task1 = threading.Thread(target=do_task_1)
    task1.start()
    ...

from file2 import DO_OR_NOT

def do_task_1():
    while True:
        print DO_OR_NOT
        if DO_OR_NOT:
            # do something

file2.py

DO_OR_NOT = True

def function1:
    global DO_OR_NOT
    # modify DO_OR_NOT
从另一个文件调用

run_tasks_threads。就像在此代码中一样,task1作为新主题启动。

我的问题是DO_OR_NOTfunction1的{​​{1}}修改未反映在task1()(新主题)中!

注意:这实际上是我的Django服务器的一部分 多次调用function1

1 个答案:

答案 0 :(得分:1)

threading.Event()类为您提供了在线程之间设置,清除和获取布尔标志的接口。

在file1.py中,必须将事件变量传递给创建线程的函数,然后传递给目标函数:

def run_tasks_threads(my_event):
    task1 = threading.Thread(target=do_task_1, args=(my_event,)
    task1.start()

def do_task_1(my_event):
    while True:
        print my_event.is_set()
        if my_event.is_set():
            # do something

最后,在调用前面函数的主脚本中,每次调用function1时都必须更新事件:

def main():
    #Create an instance of the event class
    my_event = threading.Event()
    file1.run_tasks_threads(my_event)
    while True
        global DO_OR_NOT
        #Get the bool value
        file2.function1()
        #Update the event flag depending on the boolean value
        if DO_OR_NOT:
            my_event.set()
        else:
            my_event.clear()