Django应用中的全局计数器?

0 投票
1 回答
1266 浏览
提问于 2025-04-15 14:35

我在想,Django 应用里有没有类似于 Tomcat 中 Servlet 上下文范围的“全局计数器”。

就像这样:

getServletContext().getAttribute("counter");
counter++;

1 个回答

1

当你写一个django应用(或者任何wsgi应用)的时候,你并不知道你的应用最终会是在单台服务器上独立运行,还是会使用多线程、多进程,甚至可能在多个不同的机器上运行,以实现负载均衡。

如果你要限制“我的应用只在单进程服务器上运行”,那么你可以使用类似下面的代码:

from django import settings
settings.counter += 1

不过,这种限制通常不太现实。所以你必须使用外部存储来保存你的计数器。

如果你想把它保存在内存中,可以考虑使用memcached。

或者你可以把请求记录到这个视图中。这样当你想要计数器的时候,只需要统计日志中的条目数量。

这个日志可以是文件形式的,也可以是数据库中的一张表,只需在你的models.py中定义一个新的模型即可。

撰写回答