實戰教程!Django Celery 異步與定時任務

Django與Celery是基於Python進行Web後端開發的核心搭配,在運營開發(即面向企業內部)的場景中很是常見。javascript

下面是基於Django的Celery異步任務和定時任務的實戰教程,你們以爲有用的話點個贊/在看吧!css

1.配置Django Celery

配置celery主要有幾點:java

1. 在settings.py的同級目錄下,建立celery.py文件(名字本身隨意取),這個文件主要是用來生成celery的實例app.python


咱們將 celery 實例的 broker 和 backend 都設爲了redis.nginx

其中 broker 的意思是「經紀人」,像股票經紀人同樣,是用於促成「交易」的,Celery中它的職責就是給 worker 推送任務。redis

而backend的職責是存放執行信息和結果,這些數據須要被持久化存於數據庫。但爲了簡化問題,咱們將其與broker同樣放置於redis當中。數據庫

2. 須要你在本身已經建立的app(不是celery的app,而是django項目的app)目錄下面,建立task.py文件(這個文件名只能是這個)django


由於Celery會統一從每一個app下面的tasks裏面監放任務。windows

3. 編寫tasks.py的任務後端

看一下tasks內部的任務如何寫:


任務的目標是延遲3秒後,返回一個語句。

4. init.py中的設置

這個是很是關鍵的一點,如何讓django在啓動的時候,也把celery給啓動了呢?
答案是在項目的init文件內,導入celery的app

2.Django 其餘配置

爲了可以觸發該異步任務,咱們接下來配置一些常規文件,views和url,首先是views函數:


而後是url:

path('test_c', test_c, name='test_c'),

3.進行測試

首先,運行django項目

python manage.py runserver


這樣,django項目和celery的app就被一塊兒啓動了,可是這個時候是沒法執行這個task的,由於worker沒有被啓動,咱們能夠試一下:

訪問: http://127.0.0.1:8000/stats/test_c

會獲得如下報錯:


正確的姿式是怎麼樣的?須要先激活worker,而後再訪問API:

celery -A NBAsite worker -l info


結果以下:



從上圖下方的log信息裏能夠看到,在延遲了3秒後,任務啓動並返回字符串,而在頁面上,也能夠看到成功返回。

須要注意的是,若是你修改了tasks的內容,是須要重啓celery才能生效的,最簡單的方法就是重啓django項目。

這樣,咱們就完成了簡單的異步任務的配置和使用。

4.定時任務配置

在異步任務中,咱們只用到了worker,而在定時任務中,還要用到celery的beat調度器。

首先來看下如何配置定時任務,或者說如何配置這個調度器。

仍是在celery.py裏面進行配置:


重點是增長了app.conf.beat_schedule這個定時任務配置,指定了 stats 文件夾下 tasks.py 中的auto_sc函數,定時於20:47分執行。

5.具體任務頁面tasks

增長一個對應要作定時任務的task

@shared_taskdef auto_sc(): print ('sc test?')    return 'halo'

6.運行命令和結果

命令的話能夠將激活worker和激活beat合併在一塊兒,以下:

celery -A NBAsite worker -B -l info

不過,windows不被容許這麼使用,所以在windows環境下,你須要同時打開worker和beater:

celery -A NBAsite worker -l infocelery -A NBAsite beat -l info


看上圖下方的log可知定時任務被成功執行。至此便完成了定時任務的配置與執行。

參考資料:
https://www.jianshu.com/p/173070bcdfaf
https://www.jianshu.com/p/ee32074a10de

咱們的文章到此就結束啦,若是你喜歡今天的Python 實戰教程,請持續關注Python實用寶典。

有任何問題,能夠在公衆號後臺回覆:加羣,回答應紅字驗證信息,進入互助羣詢問。

原創不易,但願你能在下面點個贊和在看支持我繼續創做,謝謝!

點擊下方閱讀原文可得到更好的閱讀體驗

Python實用寶典 (pythondict.com)
不僅是一個寶典
歡迎關注公衆號:Python實用寶典


本文分享自微信公衆號 - Python實用寶典(pythondict)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。

相關文章
相關標籤/搜索