我的django应用程序包含一个循环,它由urls.py中的以下代码启动:
def start_serial():
rfmon = threading.Thread(target=rf_clicker.RFMonitor().run)
rfmon.daemon = True
rfmon.start()
start_serial()
此子线程内的循环引用global_vars.py中定义的全局变量。我想在视图中更改为此变量的值,但它似乎不起作用。
来自views.py的:
import global_vars
def my_view(request):
global_vars.myvar = 2
return httpResponse...
如何让循环中的函数知道该视图已被调用?
循环侦听来自遥控器的信号,并且基于按钮按下可以将数据保存到数据库。 Web界面中有多个视图,用于更改遥控器的设置。当这些设置被更改时,循环内的状态需要不会保存数据。
答案 0 :(得分:2)
我同意Ignacio Vazquez-Abrams,不要使用全局变量。 特别是在你的用例中。这种方法的问题在于,当您将应用程序部署到wsgi容器或者您拥有的内容时,您将有多个应用程序实例在不同的进程中运行,因此在一个进程中更改全局变量不会在其他进程中更改它
我也不建议使用线程。如果您需要一个长时间运行的进程来异步处理任务(似乎就是这种情况),请考虑查看Celery(http://celeryproject.org/)。它真的很擅长。
答案 1 :(得分:1)
我承认没有经验可以利用它们,但如果你没有看过Django的信令能力,它们似乎是这类活动的主要候选者(并且比全局变量更合适)。