我正在使用django构建一个报告门户。在这个门户中,我需要让用户能够安排报告定期运行。我一直在研究django-celery,我知道您可以使用periodic_task装饰器来调度重复出现的任务,但在我看到的所有示例中,cron调度信息都是硬编码到装饰器中的。
@periodic_task(run_every=crontab(hours=7, minute=30, day_of_week="mon"))有没有一种方法可以使用django-celery根据用户的输入动态地调度重复执行的任务?
例如,用户使用表单选择要运行的报告,提供报告所需的所有参数,以及运行报告时的计划。处理完表单后,我是否可以调用某个方法或函数将run_report任务添加到计划中?如果是这样,有没有一种方法可以检索数据库中存储的所有当前计划,以便显示它们?
发布于 2012-02-14 20:06:27
在管理界面中查看djcelery:http://localhost:8000/admin/djcelery/
如果您可以在那里构建所需的任务设置(使用crontab/intervals/periodic),请尝试。如果可以,您很有可能快速构建它。
发布于 2014-09-17 20:40:45
http://celery.readthedocs.org/en/latest/userguide/calling.html
例如:-
from celery import task
@task.task(ignore_result=True)
def T(message=None ):
print message。
T.apply_async(countdown=10, message="hi")从现在开始执行10秒。
T.apply_async(eta=now + timedelta(seconds=10),message="hi")从现在开始执行10秒,使用eta指定
T.apply_async(countdown=60, expires=120,message="hi")从现在开始在一分钟内执行,但在两分钟后过期。
发布于 2014-08-30 15:17:43
覆盖模型中的save方法。每当用户想要启动一个流程/任务时,他都会修改触发任务启动的模型。
your_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],)your_app/tasks.py
@celery.task()
def my_task(foo, bar):
#do somethinghttps://stackoverflow.com/questions/8437664
复制相似问题