【问题标题】:Django load resources on startupDjango 在启动时加载资源
【发布时间】:2017-01-24 04:28:10
【问题描述】:

如何在 Django 启动时从 mysql 数据库加载资源并将其放入内存 (Redis) 以供所有应用程序使用。

我看过这个 [https://docs.djangoproject.com/en/dev/ref/applications/#django.apps.AppConfig.ready]

class MyAppConfig(AppConfig):
        def ready(self):

但他们提到不要在 ready 函数中使用 db 连接。我的网站启动时怎么办?

我也可以在 ready 里面设置缓存值吗?

from django.core.cache import cache
cache.set()

【问题讨论】:

    标签: python django apache redis


    【解决方案1】:

    由于您只是加载到 redis 中,而不是创建保存在内存中并由您网站中的所有应用共享的模型实例,也许最好的方法是使用 custom management command

    第二个解决方案是创建一个 Django CLI,正如 e4c5 在前文档中发布的那样:

    假设你已经设置了一个 django 项目,并且设置文件在一个名为 main 的应用程序中,这就是你初始化代码的方式

    import os, sys
    
    # Setup environ
    sys.path.append(os.getcwd())
    os.environ.setdefault("DJANGO_SETTINGS_MODULE", "main.settings")
    
    # Setup django
    import django
    django.setup()
    
    # rest of your imports go here
    
    from main.models import MyModel
    
    # normal python code that makes use of Django models go here
    
    for obj in MyModel.objects.all():
        print obj
    

    上面可以执行为

    python main/cli.py
    

    既然你在使用redis,你真的需要在memcache中存储东西吗?但是,如果您也需要这样做,也可以通过 CLI 完成

    【讨论】:

    • 有什么方法可以将值存储到应用程序上下文中。并由所有用户访问。 ?即使我们有,当我们部署到 apache 时,wsgi 实例可能会重新启动。所以我想我需要存储在 memcahe 中,以便为所有用户频繁更改实时数据。
    • 所以您的命令/CLI 我们必须单独运行?我们如何将所有内容集成到一个 Web 项目中,并在 Apache 启动时启动。
    • 看重点是这与 apache 重新启动完全无关。如果您要使缓存中的项目过期,您应该从修改项目的代码中的任何位置执行此操作,而不是等待 apache 重新启动。
    • 在安装良好的情况下,apache 可以运行数月甚至数年而无需重新启动,因此您的命令应该与此无关。
    • 你问我是否可以,我说可以,但没有讨论它的优缺点。您为什么不就该主题发布另一个问题?
    猜你喜欢
    • 1970-01-01
    • 2011-02-25
    • 1970-01-01
    • 1970-01-01
    • 2013-05-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多