日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Django 使用celery任务队列的配置

發布時間:2025/5/22 编程问答 18 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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任务队列的配置的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。