长时间运行的Django进程可行吗?

Posted

技术标签:

【中文标题】长时间运行的Django进程可行吗?【英文标题】:Long running Django process feasible? 【发布时间】:2016-04-01 19:50:14 【问题描述】:

是否有(推荐的)方法将 Django 作为长时间运行的单个进程(处理排队的请求)运行?

我正在尝试解决一个性能问题,即最佳预计性能调整仍然不够快,无法用于生产。调整后的数据库请求和缓存最终都会在反序列化中占用太多时间。

此外,查询集是相当静态的。

因此,解决性能问题的一种选择似乎是在长期运行的进程中对现有已执行/已实现的查询集进行计算。

有人知道以这种方式运行 django 的方法吗?

【问题讨论】:

【参考方案1】:

因为 Django 使用 Python,您可以很容易地在应用程序上运行部分脚本,在服务器上运行,作为 cron 作业或持续运行。

如果脚本在项目目录中,则需要从以下几行开始:

import os
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "<module>.settings")

其中&lt;module&gt;是包含settings.py文件的目录。

然后就可以正常访问对象和函数了,例如:

from app.models import *

if __name__ == "__main__":
    obj = MyObj.objects.all()

【讨论】:

这里的问题是接受请求。我仍然想接受请求,但来自同一个进程,这样我就可以跨请求有效地共享内存中的数据。

以上是关于长时间运行的Django进程可行吗?的主要内容,如果未能解决你的问题,请参考以下文章

以与长时间运行的 Python 进程不同的用户身份运行子进程

什么可能导致长时间运行的进程中突然出现 ClassNotFoundException?

在 ASP.Net MVC5 中管理长时间运行的进程

在 qthread 中停止长时间运行的进程

在长时间运行的 c 进程和 python 之间进行双向 IPC 的最佳方法是啥?

通过将长时间运行的任务拆分为单独的进程来提高程序性能