中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么在Django中使用Celery實現異步任務

發布時間:2021-05-17 18:01:03 來源:億速云 閱讀:375 作者:Leah 欄目:開發技術

這期內容當中小編將會給大家帶來有關怎么在Django中使用Celery實現異步任務,文章內容豐富且以專業的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

Celery

許多Django應用需要執行異步任務, 以便不耽誤http request的執行. 我們也可以選擇許多方法來完成異步任務, 使用Celery是一個比較好的選擇, 因為Celery有著大量的社區支持, 能夠完美的擴展, 和Django結合的也很好. Celery不僅能在Django中使用, 還能在其他地方被大量的使用. 因此一旦學會使用Celery, 我們可以很方便的在其他項目中使用它.

celery 是一個用于實現異步任務的庫, 在很多項目中都使用它, 它和 django 融合使用很完美. 使用 celery 可以在實現 http request請求返回 view 前做一些我們想做的而且耗時的事情而不會讓用戶等待太久

環境

django 版本 == 1.11.6

celery 版本 == 3.1.25

安裝

pip install django-celery
pip install celery

首先需要將 celery 添加到 django 項目的 settings 里, celery 任務和 django 需要一個 中間人(broker),,這里使用的是 django 自帶的 broker, 但在生產中一般使用 rabbitmq, Redis 等,在 INSTALLED_APP 中需要添加 djcelery 和 kombu.transport.django, 還有 app 應用。

- project/project/ settings.py:

import djcelery

djcelery.setup_loader() 
BROKER_URL = 'django://'

INSTALLED_APP = (
 ...
 'app'
 'djcelery',
 'kombu.transport.django',
)

新建 celery.py 創建一個 celery 應用,并添加以下內容

- project/project/ celery.py:

# 相對路徑導入, 防止導入 celery 時沖突
from __future__ import absolute_import
import os
from celery import Celery
from django.conf import settings

# 讓 celery 能找到 django 項目
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'project.settings')
# 創建一個 celery 應用
app = Celery('project')

# 導入配置
app.config_from_object('django.conf:settings')
# 自動發現 task
app.autodiscover_tasks(lambda: settings.INSTALLED_APPS)

@app.task(bind=True)
def debug_task(self):

 print('Request: {0!r}'.format(self.request))

- project/project/ __init__.py:

from __future__ import absolute_import

# This will make sure the app is always imported when
# Django starts so that shared_task will use this app.
from .celery import app as celery_app

在 django app 中添加任務,文件名必須是 tasks.py, 在普通 python 函數前加一個 @task() 裝飾器就變成了 celery task

-project/app/ tasks.py:

from celery.task import task
from time import sleep

@task()
def helloWorld():
 print 'helloWorld'
 sleep(10)
 print 'helloWorld'
 return 'helloCelery'

這樣,一個任務就創建成功了,只剩下在 view 中調用了

-project/app view.py:

from tasks.py import helloWorld

def home():

 helloWorld.delay()

 return HttpResponse('helloCelery')

最后

python manage.py migrate

上述就是小編為大家分享的怎么在Django中使用Celery實現異步任務了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關知識,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

兰溪市| 白城市| 太和县| 襄垣县| 安达市| 神农架林区| 江北区| 临湘市| 上栗县| 延长县| 徐汇区| 元江| 昭平县| 晋宁县| 乌兰察布市| 元阳县| 新密市| 盐津县| 时尚| 密山市| 盐池县| 乌苏市| 安徽省| 灌阳县| 灵宝市| 汝阳县| 牙克石市| 福鼎市| 滨州市| 冷水江市| 达孜县| 逊克县| 多伦县| 抚宁县| 陇西县| 益阳市| 无锡市| 荣成市| 时尚| 化州市| 时尚|