我正在python中使用django
准备一个Web服务。当我启动Web服务时,我希望有一个主要功能来运行。但是,下面的代码在Web服务中不起作用。我想要一个初始化函数,它将填充全局定义的结构。我可以通过直接定义init函数并将其命名为模块的结尾来实现它,但我不知道这是否是正确的方法。
if __name__ == '__main__':
main()
Here发布了类似的问题。据我所知,没有明确的解决方案,我找到了这样做的方法。我在Web服务模块中定义了一个虚函数,如:
def warmup(request):
response = HttpResponse()
response.write("ok")
return response
我们使用命令sudo python manage.py runserver 0.0.0.0:8081
启动应用程序,因此我在manage.py
中添加了一段代码,以便:
#!/usr/bin/env python
import os
import sys
import requests
import threading
import time
def warmup_request():
print "warmup.."
time.sleep(1)
try:
r = requests.get("http://localhost:8081/warmup/")
if r.content == "ok":
return
except Exception, e:
pass
threading.Timer(0,warmup_request).start()
if __name__ == "__main__":
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "mysite.settings")
from django.core.management import execute_from_command_line
warmup_request()
execute_from_command_line(sys.argv)
如果warmup
服务API返回ok
,则意味着加载初始数据流程已完成。通过定义全局标志,我们可以在预热完成之前阻止所有其他服务API请求。或者改为定义全局标记,我们可以使用request_started
信号声明here来阻止所有传入的请求,而不需要花费太多精力。