首页 > 解决方案 > 如何从基于 Django 的站点管理任务的停止或重新启动?

问题描述

我将在服务器中运行一个脚本,该脚本将自动在数据库中创建模型实例。这个想法是使用一个无限循环(例如while True :),它将无休止地创建实例,直到我以某种方式停止它。我想使用 Django 从我的网站上很好地检查我的数据库有多大,然后我想从那里停止或重新启动它。这里有什么好的方法?我在考虑芹菜,但我不知道我怎么会不知道如何阻止它,它看起来有点矫枉过正。有什么建议吗?

标签: djangoasynchronous

解决方案


一个简单的解决方案是有一个类将脚本的名称以及它是否应该继续运行保存到数据库:

class ScriptTracker():
    name = models.Charfield()
    keep_running = models.BooleanField()

然后,您的脚本将在每个循环中检查 db 以查看它是否应该停止:

def my_script():

    while True:

        if not ScriptTracker.objects.get(name="my_script").keep_running:
            # stop running
            return

        # creating an instance in the db
        MyObject.objects.create(name="helloworld")
        
  1. 创建 ScriptTracker 对象

ScriptTracker.objects.create(name="my_script", keep_running=True)

  1. 启动您的脚本运行,如果将脚本构建为管理命令,则可以简单地完成:

python manage.py my_script


推荐阅读