我的项目中有以下结构。
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_NOT
中function1
的{{1}}修改未反映在task1()
(新主题)中!
注意:这实际上是我的Django服务器的一部分
多次调用function1
。
答案 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()