Django + background-tasks如何初始化

Django + background-tasks how to initialize

我有一个基本的 django 项目,用作 (Condor) 计算集群的前端接口以生成模拟。从 django 应用程序,用户可以开始模拟(在 Condor 中)。模拟相关的元数据和模拟状态保存在数据库中。

我需要添加一项新功能:在(某些)模拟完成时发出通知。

因为我想要一个简单的解决方案(而且我已经在使用后台任务),所以我想使用重复任务,以固定的时间间隔向 Condor 查询任务,更新数据库,并在必要时发送通知。

因此,如果我想每 10 分钟更新一次状态,我将有类似的内容:

@background(schedule=1)
def check_simulations(repeat=600):
    # lookup simulation statuses
    simulation_list = get_Simulations()
    for sim in simulations_list:
       if sim.status == Simulation.DONE:
            user.email_user('Simulation Complete', 'You have been notified')

def initialize():
     check_simulations()

但是这个任务(或者更确切地说是 initialize() 方法)必须启动(调用一次)以创建和调度 check_simulations() 任务(这实际上将序列化调用并将其保存在D B);之后后台任务线程将读取它并执行并重新安排它(如果有错误)

我的问题:

一个这样的地方可能是 urls.py,但这是一个非常丑陋的解决方案。有没有更好的方法?

我遇到了类似的问题,我是这样解决的。

我在urls.py中初始化我的任务,我不知道你是否可以使用其他地方来放置它,还添加了,如果,检查任务是否已经在数据库中

from background_task.models import Task
if not Task.objects.filter(verbose_name="update_orders").exists():
   tasks.update_orders(repeat=300, verbose_name="update_orders")

我已经测试过了,它工作正常,您还可以使用其他参数搜索订单,例如名称、散列、...

你可以在这里查看任务模型:https://github.com/arteria/django-background-tasks/blob/master/background_task/models.py