我在项目中具有以下结构。
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
作为新线程。
我的问题是function1
的DO_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()