8

我正在使用 django 构建一个报告门户。在这个门户中,我需要让用户能够安排报告在重复发生的基础上运行。我一直在研究 django-celery 并了解您可以使用periodic_task 装饰器来安排重复发生的任务,但在所有示例中,我看到 cron 调度信息被硬编码到装饰器中。

@periodic_task(run_every=crontab(hours=7, minute=30, day_of_week="mon"))

有没有办法使用 django-celery 根据用户的输入动态安排重复发生的任务?

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

4

3 回答 3

1

Tak a look at djcelery in the admin-interface: http://localhost:8000/admin/djcelery/

Try if you can build the required task-setup there (using crontabs/intervals/periodic tasks) If yes there is a big chance that you can build this up quickly..

于 2012-02-14T12:06:26.577 回答
1

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")

从现在开始一分钟后执行,但在 2 分钟后过期。

于 2014-09-17T12:40:44.717 回答
0

覆盖模型中的保存方法。每当用户输入喜欢启动流程/任务时,他将修改触发任务启动的模型。

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 something
于 2014-08-30T07:17:42.817 回答