python – 如何避免在Django中运行两次AppConfig.ready()方法

我想在启动Django服务器时执行一些代码,但我希望它只运行一次。目前,当我启动服务器时,它执行两次。 Documentation表示这可能会发生:

you should put a flag on your AppConfig classes to prevent re-running
code which should be executed exactly one time.

任何想法如何实现?下面的打印声明仍然执行两次。

from django.apps import AppConfig
import app.mqtt
from apscheduler.schedulers.background import BackgroundScheduler

class MyAppConfig(AppConfig):
    name = 'app'
    verbose_name = "HomeIoT"
    run_already = False

    def ready(self):
        if MyAppConfig.run_already: return
        MyAppConfig.run_already = True
        print("Hello")
你需要实现锁定。这不是一个简单的问题,解决方案不会因为处理进程和线程而感到自然。要警告锁定问题有很多答案,一些更简单的方法:

一个文件锁:Ensure a single instance of an application in Linux(注意,线程默认共享文件锁,所以这个答案需要扩展到占线程)。

还有一个答案是使用一个名为tendo的Python包来封装一个文件锁实现:http://stackoverflow.com/a/1265445/181907

Django本身在django.core.files.locks中提供了一个抽象的便携式文件锁定实用程序。

http://stackoverflow.com/questions/33814615/how-to-avoid-appconfig-ready-method-running-twice-in-django

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:python – 如何避免在Django中运行两次AppConfig.ready()方法