首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >根据用户输入使用django-celery调度任务

根据用户输入使用django-celery调度任务
EN

Stack Overflow用户
提问于 2011-12-09 05:05:06
回答 3查看 1.9K关注 0票数 8

我正在使用django构建一个报告门户。在这个门户中,我需要让用户能够安排报告定期运行。我一直在研究django-celery,我知道您可以使用periodic_task装饰器来调度重复出现的任务,但在我看到的所有示例中,cron调度信息都是硬编码到装饰器中的。

代码语言:javascript
复制
@periodic_task(run_every=crontab(hours=7, minute=30, day_of_week="mon"))

有没有一种方法可以使用django-celery根据用户的输入动态地调度重复执行的任务?

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

EN

回答 3

Stack Overflow用户

发布于 2012-02-14 20:06:27

在管理界面中查看djcelery:http://localhost:8000/admin/djcelery/

如果您可以在那里构建所需的任务设置(使用crontab/intervals/periodic),请尝试。如果可以,您很有可能快速构建它。

票数 1
EN

Stack Overflow用户

发布于 2014-09-17 20:40:45

http://celery.readthedocs.org/en/latest/userguide/calling.html

例如:-

代码语言:javascript
复制
from celery import task

@task.task(ignore_result=True)
def T(message=None ):
    print message

代码语言:javascript
复制
T.apply_async(countdown=10, message="hi")

从现在开始执行10秒。

代码语言:javascript
复制
T.apply_async(eta=now + timedelta(seconds=10),message="hi")

从现在开始执行10秒,使用eta指定

代码语言:javascript
复制
T.apply_async(countdown=60, expires=120,message="hi")

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

票数 1
EN

Stack Overflow用户

发布于 2014-08-30 15:17:43

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

your_app/models.py:

代码语言:javascript
复制
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

代码语言:javascript
复制
@celery.task()
def my_task(foo, bar):
    #do something
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8437664

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档