Python Django全局variables

我正在寻找简单但推荐的方法在Django中只存储一个variables。 当Apache重新启动或重新启动Django开发服务器时,该variables将重置为0.更具体地说,我要计算每个模型实例(数据库logging)上发生特定操作的次数,但出于性能方面的原因,不想将这些计数存储在数据库中。 我不关心服务器重新启动后计数是否消失。 但只要服务器启动,我希望这些计数在Django shell和Web界面之间保持一致,并且我希望能够返回在每个模型实例上发生了多less次操作。

我不希望variables与用户或会话相关联,因为我可能想要返回这些计数而不login(并且我希望无论用户login的计数是否一致)。 我是在描述一个全局variables吗? 如果是这样,我怎样在Django中使用它? 我注意到像urls.py,settings.py和models.py这样的文件似乎在每个服务器启动时只被parsing一次(相比之下,views.py似乎是在请求发出的时候被parsing的)。 这是否意味着我应该在其中一个文件中声明我的variables? 或者,我应该以某种方式将其存储在模型属性中(只要服务器正在运行,只要它一直存在)? 这可能是一个简单的问题,但我不确定在Django中是如何完成的。

任何意见或build议,非常感谢。 谢谢,乔

不能声明全局variables。 设置(常量)是正确的,如果做得对。 但variables违反了无共享架构,可能会造成很大的麻烦。 (最好的情况下,他们会不一致)

我只是将这些统计数据存储在caching中。 (实际上,我会将它们存储在数据库中,但您明确表示相信这会对性能产生负面影响,所以…)

新的incr()decr()方法特别适用于计数。 请参阅文档了解更多信息。

为什么不能声明全局variables? O_O。 这看起来像一个宣传。 如果作者知道他想要什么,会有什么副作用,为什么不呢。 也许这只是一个快速的实验。

你可以把你的柜台声明为模范class成员。 然后,为了处理竞争条件,你必须添加一个方法,如果另一个线程与另一个线程一起工作,那么这个方法将会等待。 像这样的东西:

 import threading class MyModel(ModelBase): _counter = 0 _counter_lock = threading.Lock() @classmethod def increment_counter(cls): with cls._counter_lock: cls._counter += 1 def some_action(self): # core code self.increment_counter() # somewhere else print MyModel._counter 

但请记住:你必须在一个过程中有你的应用程序 。 所以,如果你已经在Apache下部署了应用程序,确保它被configuration为产生许multithreading,但不是很多进程。 如果您正在尝试使用./manage.py run则不需要./manage.py run任何操作。