我对理解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?
非常感谢提前。
答案 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即可。