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
def 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源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。