用過才知道真的那么好系列(四)——Django后臺中使用Celery計劃任務(wù)

這是Celery系列的最后一篇。
在Django中怎么用Celery呢?當(dāng)然第三篇中是一種方法,那種方法自由度很大,也很有用。不過,既然Django的Admin如此好用,我們有沒有什么方式將Admin與Celery結(jié)合起來呢,下面就來介紹django-celery插件。


1.安裝django-celery

django-celery是一個已經(jīng)寫好的Django App插件,我們使用pip方式安裝。

$ sudo pip install django-celery

2.配置settings.py

添加配置至settings.py:

#使用的為上一篇的demo project
INSTALLED_APPS = (
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'home',#上一篇自己的應(yīng)用
    'djcelery',#加上這個東西,不要問我為什么
)
...
#末尾添加數(shù)據(jù)庫調(diào)度
CELERYBEAT_SCHEDULER = 'djcelery.schedulers.DatabaseScheduler'

3.數(shù)據(jù)庫

同步數(shù)據(jù)庫,命令行輸入:

$ python manage.py migrate

運行后,我們可以看到類似如下圖:

選區(qū)_005.png

以為在數(shù)據(jù)庫中添加相關(guān)djcelery的表。

4.初始命令

現(xiàn)在我們打開命令行窗口:

給大家介紹一款好用的終端
我工作中使用的終端為Terminator(終結(jié)者),哇,一聽名字就碉堡了。
它可以隨意分割窗口,比ubuntu自帶的終端好用多了。就像這樣:

Terminator.png

有了Terminator之后,媽媽再也不用擔(dān)心我因手速不夠快而浪費大把時間了。

  • 在一個終端中重啟Celery命令:
$ celery -A demo worker -l debug
  • 打開另一個終端窗口,輸入命令:
$ celery -A demo beat -l debug --max-interval=10 #每十秒掃瞄任務(wù)
2016-04-26 20:48:43屏幕截圖.png

上面命令意為每10秒鐘掃描djcelery任務(wù),不過現(xiàn)在我們還沒有定義任何定時任務(wù),請看第5步

5.配置Admin后臺

因為要用到Admin后臺,我們必須新建超級用戶:

$ python manage.py createsuperuser 

然后按照提示一步步進(jìn)行輸入。

打開第三個終端,重啟項目:

$ python manage.py runserver

進(jìn)入后臺:127.0.0.1:8000/admin/

會看到Djcelery應(yīng)用下有如圖下五項:

選區(qū)_006.png

怎樣配置:

  • 定時。進(jìn)入Crontabs頁面,這個和Linux的Crontab命令類似,如不熟悉可自行g(shù)oogle(因為我也不怎么用)。點擊Add crontab按鈕后輸入**14 * * * ***保存(每到十四分鐘時執(zhí)行任務(wù))。
  • 配置任務(wù)。進(jìn)入Periodic tasks周期性任務(wù)選項。點擊Add Periodic tasks按鈕。添加配置如下圖:

選區(qū)_007.png

解釋:我們設(shè)置了一個名為Hello的任務(wù)。任務(wù)內(nèi)容為home.tasks.hello_world,也就是我們上一節(jié)中寫的那個。選擇周期為我們第一步定義好的**14 * * * ***。當(dāng)然你也可以配置一下Interval。

6.查看結(jié)果

待到每個小時的14分鐘,你便可以看到Celery的后臺執(zhí)行了hello_world函數(shù)(打印了hello world)。不過這個Crontab定得太特殊了。我們可以再寫一個類似***/5 * * * ***,每5分鐘執(zhí)行...

7.總結(jié):

Celery還有很多不錯的功能,官方教程是個不錯的地方。有人說全是英語看不懂啊,其實就我來看,英文教程不必每個單詞都懂,因為一般教程都會有代碼演示的,你可以先瀏覽一邊英文,再看代碼,回過頭來就能知道大致意思了。Celery介紹到此結(jié)束,拜拜...

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容