让用户创建芹菜定期任务

时间:2017-09-19 14:43:44

标签: django redis celery django-celery periodic-task

我想问你关于django应用程序中的芹菜和redis用法。我正在学习芹菜约2天,我仍然有点困惑:/我已经安装了芹菜和redis,它的工作正常。我的问题是,我希望用户创建,更新和暂停周期性任务。我已经阅读了这篇文章 - http://kindshofer.net/2016/11/19/dynamically_adding_a_periodic_task_to_celery.html和这个问题 - How to dynamically add / remove periodic tasks to Celery (celerybeat)一篇其他文章的内容,但没有这两篇文章那么有用,而且看来,我需要使用django-celery。我想,这是一个很好的选择,但后来我读过(这里 - > https://github.com/celery/django-celery),django-celery使用django结果后端(这意味着 - 我的db,rigth?我想用Redis的!)。是否可以使用django-celery和redis?也许用django-celery我不需要使用redis?也许有其他方式让用户创建定期任务?我真的需要我的周期性任务是快速和轻量级的,因为会有很多它们并且它们需要完美无缺(这就是为什么我认为我需要将它们推到其他地方)。 我真的很感激任何建议!

2 个答案:

答案 0 :(得分:1)

快速轻巧,redis == Python RQ。但是,暂停工作可能是一个问题。

关于Celery问题:结果后端仅存储结果。它不处理队列。但即便如此,您也可以将结果发送给Redis:

CELERY_RESULT_BACKEND = 'django-cache'

配置cache

CACHES = {
    "default": {
        "BACKEND": "django_redis.cache.RedisCache",
        "LOCATION": "redis://127.0.0.1:6379/1",
        "OPTIONS": {
            "CLIENT_CLASS": "django_redis.client.DefaultClient",
        }
    }
}

但是 - 使用django-db后端的原因是可以在结果上创建查询集。这通常更有用,因为结果显示在视图中,而作业通常不是。能够聚合结果(如平均作业执行时间)和创建图形,在Django中非常有用,使用ORM更容易实现,然后使用键/值存储在python中自行排序/聚合这些东西。

答案 1 :(得分:0)

我认为你正在制造一些混乱...... Celery需要Redit服务器作为消息代理,这两件事必须全局安装在你的系统中..为了将这2个工具与django集成你安装(最好的选择是在您的虚拟环境中)django_celery_beat用于使用crontab和django_celery_results进行定期任务,以便使用Django存储Celery任务......

当然可以让用户启动并制作定制的定期任务。您可以(在您的模板中,使用表单)获取用户输入,并在您的视图中获取该输入并将其传递给函数在您的tasks.py文件上..在您的tasks.py上,您可以创建一个创建任务的函数!

本指南非常有用: https://github.com/codingforentrepreneurs/Guides/blob/master/all/Celery_Redis_with_Django.md