uwsgi托管Django掉进去的那些坑

前阵子用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多次初始化,定时任务也只启了一个。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容