根据用户输入使用django芹菜计划任务

根据用户输入使用django芹菜计划任务,django,user-input,celery,django-celery,Django,User Input,Celery,Django Celery,我正在使用django构建一个报告门户。在这个门户中,我需要让用户能够安排报告在重复的基础上运行。我一直在研究django芹菜,了解到可以使用周期性任务装饰器来安排重复的任务,但在所有示例中,我都看到cron计划信息硬编码到装饰器中 @periodic_task(run_every=crontab(hours=7, minute=30, day_of_week="mon")) 有没有一种方法可以使用django芹菜根据用户的输入动态地安排重复的任务 例如,用户使用表单选择要运行的报告,提供报告

我正在使用django构建一个报告门户。在这个门户中,我需要让用户能够安排报告在重复的基础上运行。我一直在研究django芹菜,了解到可以使用周期性任务装饰器来安排重复的任务,但在所有示例中,我都看到cron计划信息硬编码到装饰器中

@periodic_task(run_every=crontab(hours=7, minute=30, day_of_week="mon"))
有没有一种方法可以使用django芹菜根据用户的输入动态地安排重复的任务


例如,用户使用表单选择要运行的报告,提供报告所需的所有参数,并在需要运行报告时提供计划。处理表单后,是否可以调用方法或函数将运行报告任务添加到计划中?如果有,是否有方法检索数据库中存储的所有当前计划,以便显示它们?

查看管理界面中的DJ芹菜:

如果可以在那里构建所需的任务设置,请尝试(使用crontab/间隔/定期任务)
如果是,则很有可能快速建立此功能。

覆盖模型中的保存方法。每当用户想要启动流程/任务时,他都会修改触发任务启动的模型

您的_app/models.py:

class My_Model(models.Model):
customer = models.ForeignKey(User, related_name='original_customer_id')
start_task = models.BooleanField(default=False, blank=True)

def save(self, *args, **kwargs):
    super(NewProject, self).save(*args, **kwargs)
    from .tasks import my_task
    my_task.apply_async(args=[self.pk, self.status, self.file_type],)
你的应用程序/tasks.py

@celery.task()
def my_task(foo, bar):
    #do something

例如:-

从现在起10秒后执行

T.apply_async(eta=now + timedelta(seconds=10),message="hi")
从现在起10秒后执行,使用eta指定

T.apply_async(countdown=60, expires=120,message="hi")

从现在起一分钟内执行,但在2分钟后过期。

或者,您可以安排一个任务,然后再安排下一个任务,依此类推……如果创建一个内部函数并将其应用到带有动态创建的
crontab
对象的
@periodic\u task
装饰器,会怎么样?我也有同样的问题,也许这会有帮助?我也有同样的问题。有关于你是如何解决这个问题的信息吗?
T.apply_async(eta=now + timedelta(seconds=10),message="hi")
T.apply_async(countdown=60, expires=120,message="hi")