Django根据日期时间模型属性调度“一次性”任务

3 投票
1 回答
1838 浏览
提问于 2025-04-18 12:51

在Django中,解决这种问题的最佳方案是什么:

我需要根据一个对象的属性值设置一个定时任务,当到达这个定时时间时,执行一个“一次性”的任务。

每次属性更新时,定时时间也需要更新。

示例(伪代码)

class Runner(models.Model):
    execute_time = models.DateTimeField()

post_save( update_scheduler, sender=Runner)


def update_scheduler(sender, instance, created, **kwargs):
    if created:
        # set schedule time = instance.execute_time
        create_or_update_schedule(instance.datetime)

使用Celery可以做到这一点吗?在对象更新时更新定时时间?

1 个回答

1

正如Banana所建议的,我用eta解决了这个问题。这里有一段简单的示例代码:

task.apply_async([ev_objects], eta=my_eta, task_id=my_task_id)

另外,"revoke"这个功能可以用来终止一个还没有开始的任务。它就像一个遥控指令,所以它只能在使用Redis或RabbitMQ的情况下有效,而在使用Django数据库时就不行。

我还在寻找一个可以用Django数据库撤销任务的解决方案。

撰写回答