如何在Python中跨线程保持全局变量



我在项目中具有以下结构。

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作为新线程。

我的问题是function1DO_OR_NOT修改未反映在task1()(新线程)!

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

theading.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()

相关内容

  • 没有找到相关文章

最新更新