2017-09-19 60 views
0

我想问你在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)其他文章loooot,但没有这两个有用),看来,我需要使用django芹菜。我认为这是一个很好的选择,但后来我读过(这里 - >https://github.com/celery/django-celery),django-celery使用django结果后端(它意味着 - 我的db,rigth?并且我想使用redis!)。 redis可以使用django-芹菜吗?也许用django-芹菜我不需要使用redis?也许有一些让用户创建定期任务的其他方式?我真的需要我的定期任务是快速和轻量级的,因为会有很多它们,并且他们需要完美无瑕(所以我认为我需要将它们推到别的地方)。 我真的很感激任何建议!让用户创建芹菜周期性任务

回答

0

我认为你有些混淆...... Celery需要Redit服务器作为消息代理,这2件事必须在你的系统中全局安装..为了将这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

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进行排序/聚合。