【发布时间】:2019-05-29 03:36:15
【问题描述】:
我试图在命令python manage.py runserver 之后立即调用函数,它可以是简单的打印。我读了一些东西,发现关于def ready(self) 的话题很有趣,比如这个
Overriding AppConfig.ready()
或Execute code when Django starts ONCE only? 我按照说明进行操作,但对于 django 2.1.3 版本它不起作用。当我收到一堆AppRegistryNotReady exceptions 时,不会调用一次就绪函数。我认为服务器启动后的调用函数是很常见的事情。它不应该带来这么多麻烦,但我仍然没有找到合适的解决方案
更新
我尝试了另一种解决方案
我创建这样的中间件类:
import time
class SimpleMiddleware:
def __init__(self, get_response):
self.get_response = get_response
while True:
print("true")
time.sleep(5)
def __call__(self, request):
response = self.get_response(request)
return response
现在我得到了正确的输出,例如:
Performing system checks...
System check identified no issues (0 silenced).
January 03, 2019 - 14:10:55
Django version 2.1.3, using settings 'CMS.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CTRL-BREAK.
true
true
true
true
true
true
true
.
.
.
【问题讨论】:
-
您说的很清楚,但我只是要确保:您希望在服务器准备好获取请求时调用函数,而不是在它自己调用启动之后?跨度>
-
@CharlesLandau 是的,当服务器准备好时我想调用函数
-
您必须了解“服务器启动后”是一个相当模糊的定义。如果您使用多处理设置(这是生产中最常见的情况),则每个进程将有一个“服务器启动”。如果进程由前端服务器管理(这也是最常见的情况),那么前端可能随时启动新的 django 进程。让我们不要谈论在负载平衡器后面有两个或更多前端服务器 - 这里“服务器启动”的定义是什么?
-
@CharlesLandau 我更新了问题
-
@brunodesthuilliers 我更新了问题
标签: python django function startup django-2.1