Django與Celery是基于Python進行Web后端開發的核心搭配,在運營開發(即面向企業內部)的場景中非常常見。
下面是基于Django的Celery異步任務和定時任務的實戰教程,大家覺得有用的話點個贊/在看吧!
1.配置Django Celery
配置celery主要有幾點:
- 在settings.py的同級目錄下,創建celery.py文件(名字自己隨意取),這個文件主要是用來生成celery的實例app.
我們將 celery 實例的 broker 和 backend 都設為了redis.
其中 broker 的意思是“經紀人”,像股票經紀人一樣,是用于促成“交易”的,Celery中它的職責就是給 worker 推送任務。
而backend的職責是存放執行信息和結果,這些數據需要被持久化存于數據庫。但為了簡化問題,我們將其與broker一樣放置于redis當中。
- 需要你在自己已經創建的app(不是celery的app,而是django項目的app)目錄下面,創建task.py文件(這個文件名只能是這個)
因為Celery會統一從每個app下面的tasks里面監聽任務。
- 編寫tasks.py的任務
看一下tasks內部的任務如何寫:
任務的目標是延遲3秒后,返回一個語句。
- 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_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 info
celery -A NBAsite beat -l info
看上圖下方的log可知定時任務被成功執行。至此便完成了定時任務的配置與執行。
-
數據庫
+關注
關注
7文章
3827瀏覽量
64523 -
python
+關注
關注
56文章
4800瀏覽量
84834 -
Django
+關注
關注
0文章
44瀏覽量
10397
發布評論請先 登錄
相關推薦
評論