Django與Celery是基于Python進(jìn)行Web后端開發(fā)的核心搭配,在運(yùn)營開發(fā)(即面向企業(yè)內(nèi)部)的場景中非常常見。
下面是基于Django的Celery異步任務(wù)和定時(shí)任務(wù)的實(shí)戰(zhàn)教程,大家覺得有用的話點(diǎn)個(gè)贊/在看吧!
1.配置Django Celery
配置celery主要有幾點(diǎn):
- 在settings.py的同級目錄下,創(chuàng)建celery.py文件(名字自己隨意?。?,這個(gè)文件主要是用來生成celery的實(shí)例app.
我們將 celery 實(shí)例的 broker 和 backend 都設(shè)為了redis.
其中 broker 的意思是“經(jīng)紀(jì)人”,像股票經(jīng)紀(jì)人一樣,是用于促成“交易”的,Celery中它的職責(zé)就是給 worker 推送任務(wù)。
而backend的職責(zé)是存放執(zhí)行信息和結(jié)果,這些數(shù)據(jù)需要被持久化存于數(shù)據(jù)庫。但為了簡化問題,我們將其與broker一樣放置于redis當(dāng)中。
- 需要你在自己已經(jīng)創(chuàng)建的app(不是celery的app,而是django項(xiàng)目的app)目錄下面,創(chuàng)建task.py文件(這個(gè)文件名只能是這個(gè))
因?yàn)镃elery會(huì)統(tǒng)一從每個(gè)app下面的tasks里面監(jiān)聽任務(wù)。
- 編寫tasks.py的任務(wù)
看一下tasks內(nèi)部的任務(wù)如何寫:
任務(wù)的目標(biāo)是延遲3秒后,返回一個(gè)語句。
- init.py中的設(shè)置
這個(gè)是非常關(guān)鍵的一點(diǎn),如何讓django在啟動(dòng)的時(shí)候,也把celery給啟動(dòng)了呢?
答案是在項(xiàng)目的init文件內(nèi),導(dǎo)入celery的app
2.Django 其他配置
為了能夠觸發(fā)該異步任務(wù),我們接下來配置一些常規(guī)文件,views和url,首先是views函數(shù):
然后是url:
path('test_c', test_c, name='test_c'),
3.進(jìn)行測試
首先,運(yùn)行django項(xiàng)目
python manage.py runserver
這樣,django項(xiàng)目和celery的app就被一起啟動(dòng)了,但是這個(gè)時(shí)候是無法執(zhí)行這個(gè)task的,因?yàn)閣orker沒有被啟動(dòng),我們可以試一下:
訪問: http://127.0.0.1:8000/stats/test_c
會(huì)得到以下報(bào)錯(cuò):
正確的姿勢是怎么樣的?需要先激活worker,然后再訪問API:
celery -A NBAsite worker -l info
結(jié)果如下:
從上圖下方的log信息里可以看到,在延遲了3秒后,任務(wù)啟動(dòng)并返回字符串,而在頁面上,也可以看到成功返回。
需要注意的是,如果你修改了tasks的內(nèi)容,是需要重啟celery才能生效的,最簡單的方法就是重啟django項(xiàng)目。
這樣,我們就完成了簡單的異步任務(wù)的配置和使用。
4.定時(shí)任務(wù)配置
在異步任務(wù)中,我們只用到了worker,而在定時(shí)任務(wù)中,還要用到celery的beat調(diào)度器。
首先來看下如何配置定時(shí)任務(wù),或者說如何配置這個(gè)調(diào)度器。
還是在celery.py里面進(jìn)行配置:
重點(diǎn)是增加了app.conf.beat_schedule這個(gè)定時(shí)任務(wù)配置,指定了 stats 文件夾下 tasks.py 中的auto_sc函數(shù),定時(shí)于20:47分執(zhí)行。
5.具體任務(wù)頁面tasks
增加一個(gè)對應(yīng)要做定時(shí)任務(wù)的task
@shared_task
def auto_sc():
print ('sc test?')
return 'halo'
6.運(yùn)行命令和結(jié)果
命令的話可以將激活worker和激活beat合并在一起,如下:
celery -A NBAsite worker -B -l info
不過,windows不被允許這么使用,因此在windows環(huán)境下,你需要同時(shí)打開worker和beater:
celery -A NBAsite worker -l info
celery -A NBAsite beat -l info
看上圖下方的log可知定時(shí)任務(wù)被成功執(zhí)行。至此便完成了定時(shí)任務(wù)的配置與執(zhí)行。
-
數(shù)據(jù)庫
+關(guān)注
關(guān)注
7文章
3752瀏覽量
64229 -
python
+關(guān)注
關(guān)注
55文章
4767瀏覽量
84375 -
Django
+關(guān)注
關(guān)注
0文章
43瀏覽量
10357
發(fā)布評論請先 登錄
相關(guān)推薦
評論