Django任务/命令执行最佳实践/理解

时间:2016-09-17 07:01:58

标签: python django django-manage.py django-management-command

我对理解django管理命令有点问题。我有一个Web应用程序,它通过eth0显示一些网络流量信息。因此,我创建了一个python类,用于分析流量并创建/更新数据库中的特定数据。像这样:

class Analyzer:
    def doSomething(self):
        #analyze the traffic create/update data in db 
    def startAnalyzing(self):
        while 1:
              self.doSomething()

然后我创建一个管理命令,用于创建此类实例并运行startAnalyzing()

现在我的问题:

这是否是通过管理命令执行此操作的正确方法,因为任务未终止(一直运行)而不是通过Web应用程序启动/停止?或者正确的方法是什么?

启动" Analyzer"可能更好吗?不是通过django?我是django的新手,不想以正确的方式做到这一点。

运行时是否可以开始嗅探流量:manage.py runserver 0.0.0.0:8080?

非常感谢提前。

1 个答案:

答案 0 :(得分:0)

您正在做的事情并非与管理命令有关。事实上,管理命令就是这个名字所暗示的,一个管理命令的命令,快速行动。不要让整个过程在Web应用程序的整个生命周期内运行。

要实现您想要的,您应该编写一个简单的python脚本并使其与流程管理器(主管?)一起运行。然后你必须在脚本的开头设置 django,这样才能访问Django的ORM,这可能是你选择Django的原因。

总而言之,你的脚本看起来如下:

import sys, os
sys.path.insert(0, "/path/to/parent/of/project") # /home/projects/django-proj

os.environ.setdefault("DJANGO_SETTINGS_MODULE", 'proj.settings')

import django
django.setup() 

from proj.app.models import DBModel

这样你就可以像在普通的Django应用程序中一样使用django的ORM。您也可以像往常一样提供数据库的模板和视图。

唯一剩下的就是让脚本保持运行,并且只需使用supervisord即可。

相关问题