美文网首页
uwsgi托管Django掉进去的那些坑

uwsgi托管Django掉进去的那些坑

作者: littlezl | 来源:发表于2017-09-18 11:00 被阅读0次

    前阵子用Django写了个接口服务,使用BlockingScheduler启动了一个定时任务,每天查一遍数据库,本机测试Django时没有任何问题,但是托管给uwsgi发布到服务器时发现分线程的定时任务并没有启动,查了些文档,发现uwsgi默认是one thread one processor,没有请求的时候,进程被挂起,子线程也就被挂起了。解决方案:
    uwsgi.ini配置文件中添加

    enable-threads = true
    

    问题解决重新发布,发现定时任务是起来了,但是一下子起了N个定时任务。一开始以为是自己的单一实例写的有问题,后来发现的确是服务器启动的时候多次初始化了view.py ,从而多次初始化了view中引用的对象。有人说可以把只需要执行一次的代码放到url.py中去,但是对于我来说,只是把N从8变成了3。最后起作用的解决方法:
    在myapp/myapp/wsgi.py文件中

    import logging
    def startup():
        taskPoll = TaskPolling.GetInstance()
    
    startup()
    logging.info("django wsgi init")
    

    查看日志,setup只执行了一次,taskPolling的单一实例在这里被保留,即使view多次初始化,定时任务也只启了一个。

    相关文章

      网友评论

          本文标题:uwsgi托管Django掉进去的那些坑

          本文链接:https://www.haomeiwen.com/subject/kgivsxtx.html