我的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界面中有几个视图,可更改遥控器的设置。在更改这些设置时,循环内的状态需要确保数据不会被保存。
发布于 2012-03-25 23:31:05
我同意Ignacio Vazquez-艾布拉姆斯的观点,不要使用全局变量。尤其是在你的用例中。这种方法的问题是,当您将应用程序部署到wsgi容器或其他容器时,您的应用程序的多个实例将在不同的进程中运行,因此在一个进程中更改全局变量不会更改其他进程中的全局变量。
我也不推荐使用线程。如果您需要一个异步处理任务的长时间运行的进程(似乎就是这种情况),可以考虑使用Celery( http://celeryproject.org/)。它真的很擅长这一点。
发布于 2012-03-25 21:06:21
我承认没有利用它们的经验,但是如果你还没有看过Django的信号功能,它们似乎是这种活动的主要候选者(而且比全局变量更合适)。
https://stackoverflow.com/questions/9863999
复制