gpt4 book ai didi

Python Django 全局变量

转载 作者:IT老高 更新时间:2023-10-28 21:32:38 33 4
gpt4 key购买 nike

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

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

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

最佳答案

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

您可以将您的计数器声明为模型-成员。然后要处理竞争条件,您必须添加一个方法,如果其他客户端从另一个线程与计数器一起工作,该方法将等待。像这样的:

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 下部署了应用程序,请确保将其配置为生成许多线程,但不要生成许多进程。如果您正在试验 ./manage.py run,则不需要任何操作。

关于Python Django 全局变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2680902/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com