Django 使用celery任务队列的配置
celery
情景:用戶發起request,并等待response返回。在本些views中,可能需要執行一段耗時的程序,那么用戶就會等待很長時間,造成不好的用戶體驗,比如發送郵件、手機驗證碼等。
使用celery后,情況就不一樣了。解決:將耗時的程序放到celery中執行。
- 點擊查看celery官方網站
- 點擊查看celery中文文檔
celery名詞:
- 任務task:就是一個Python函數。
- 隊列queue:將需要執行的任務加入到隊列中。
- 工人worker:在一個新進程中,負責執行隊列中的任務。
- 代理人broker:負責調度,在布置環境中使用redis。
?
1 首先在運行django框架的環境當中安裝:
celery==3.1.25 django-celery==3.1.17?
?
2 在項目的settings.py中進行如下配置
注冊app中添加djcelery
INSTALLED_APPS = (...'djcelery', }?
配置任務代理和任務模塊
import djcelery djcelery.setup_loader() BROKER_URL = 'redis://127.0.0.1:6379/2'這里 reids是存放任務的隊列。要確保環境中有redis服務
?
3 在應用目錄下建立一個任務tasts.py文件 里面寫下任務函數
1 import time 2 from celery import task 3 4 @task 5 def sayhello(): 6 print('hello ...') 7 time.sleep(2) 8 print('world ...')這里將函數用task裝飾之后,django就會在我們的模塊中找,如果這個函數被調用的時候,就自動添加到celery隊列當中,隊列幫我們執行
?
?
4 在視圖當中調用
from booktest import tasks ... def sayhello(request):# print('hello ...')# time.sleep(2)# print('world ...') tasks.sayhello.delay()return HttpResponse("hello world")切記要引入剛剛任務文件,
并且調用的時候不能直接調用,要任務函數.delay() 進行調用
如果任務函數要參數,則將參數表傳給delay()
?
?
5 執行遷移
python manage.py migrate?
6 啟用redis服務器
sudo service redis start?
?
7 啟動celery的worker
python manage.py celery worker --loglevel=info?
?
在這之后,可以運行我們的功能模塊,當任務函數被調用的時候,就會送進celery隊列,有celery幫我們托管調度。不會阻塞我們的主線程~
?
轉載于:https://www.cnblogs.com/Lin-Yi/p/7590971.html
總結
以上是生活随笔為你收集整理的Django 使用celery任务队列的配置的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 第四篇 HTML 表单深入了解、注释和a
- 下一篇: 两个input在一行让它们能对齐