2017-09-19 61 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進行排序/聚合。