gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 15:52:24 27 4
gpt4 key购买 nike

我的项目中有以下结构。

文件1.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

文件2.py

DO_OR_NOT = True

def function1:
global DO_OR_NOT
# modify DO_OR_NOT

run_tasks_threads 是从另一个文件调用的。正如这段代码所示,它task1 作为一个新线程启动。

我的问题是,对 function1DO_OR_NOT 的修改没有反射(reflect)在 task1()(新线程)中!

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

最佳答案

threading.Event()类为您提供了一个用于在线程之间设置、清除和获取 bool 标志的接口(interface)。

在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()

关于python - 如何在Python中跨线程维护全局变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41162613/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com