Django视图改变全局变量

时间:2012-03-25 20:58:28

标签: python django

我的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界面中有多个视图,用于更改遥控器的设置。当这些设置被更改时,循环内的状态需要不会保存数据。

2 个答案:

答案 0 :(得分:2)

我同意Ignacio Vazquez-Abrams,不要使用全局变量。 特别是在你的用例中。这种方法的问题在于,当您将应用程序部署到wsgi容器或者您拥有的内容时,您将有多个应用程序实例在不同的进程中运行,因此在一个进程中更改全局变量不会在其他进程中更改它

我也不建议使用线程。如果您需要一个长时间运行的进程来异步处理任务(似乎就是这种情况),请考虑查看Celery(http://celeryproject.org/)。它真的很擅长。

答案 1 :(得分:1)

我承认没有经验可以利用它们,但如果你没有看过Django的信令能力,它们似乎是这类活动的主要候选者(并且比全局变量更合适)。

https://docs.djangoproject.com/en/dev/ref/signals/