django Web服务的主要功能

时间:2014-04-22 14:54:27

标签: python django web-services

我正在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来阻止所有传入的请求,而不需要花费太多精力。

0 个答案:

没有答案