Django应用中的全局计数器?
我在想,Django 应用里有没有类似于 Tomcat 中 Servlet 上下文范围的“全局计数器”。
就像这样:
getServletContext().getAttribute("counter");
counter++;
1 个回答
1
当你写一个django应用(或者任何wsgi应用)的时候,你并不知道你的应用最终会是在单台服务器上独立运行,还是会使用多线程、多进程,甚至可能在多个不同的机器上运行,以实现负载均衡。
如果你要限制“我的应用只在单进程服务器上运行”,那么你可以使用类似下面的代码:
from django import settings
settings.counter += 1
不过,这种限制通常不太现实。所以你必须使用外部存储来保存你的计数器。
如果你想把它保存在内存中,可以考虑使用memcached。
或者你可以把请求记录到这个视图中。这样当你想要计数器的时候,只需要统计日志中的条目数量。
这个日志可以是文件形式的,也可以是数据库中的一张表,只需在你的models.py
中定义一个新的模型即可。