Django專案中使用Celery

ConnorK發表於2021-03-07

官方參考文件docs.celeryproject.org/en/stable/d...

注意:Celery 4.0支援Django 1.8和更高版本。對於Django 1.8之前的版本,請使用Celery 3.1。

一、安裝

pip install celery

二、專案結構

-- proj/
  -- manage.py
  -- proj/
      -- __init__.py
      -- settings.py
      -- urls.py
  -- myapp/
    -- __init__.py
    -- apps.py
    -- views.py
    -- models.py

三、使用步驟

第一步

proj/proj/下新建一個celery.py模組,編寫如下程式碼:

import os
from celery import Celery
from __future__ import absolute_import, unicode_literals

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'proj.settings')  # 設定django環境

app = Celery('proj')

app.config_from_object('django.conf:settings', namespace='CELERY')  # 使用CELERY_ 作為字首,在settings中寫配置

app.autodiscover_tasks()  # 發現任務檔案每個app下的task.py

第二步

proj/proj/__init__.py檔案下匯入上面建立的模組, 程式碼如下:

from __future__ import absolute_import, unicode_literals
from .celery import app as celery_app

__all__ = ['celery_app']

第三步

myapp/下建立自己的任務模組tasks.py,編寫任務函式並用@shared_task裝飾,程式碼如下:

from __future__ import absolute_import, unicode_literals
from celery import shared_task

@shared_task
def async_func():
    pass

第四步

儲存任務執行結果,不需要的可忽略這步。

  • 安裝 django-celery-results
pip install django-celery-results
  • 新增django-celery-results到專案的settings
INSTALLED_APPS = (
    ...,
    'django_celery_results',
)
  • 執行資料庫遷移建立Celry資料表
python manage.py migrate django_celery_results
  • 配置 Celery 使用 django_celery_results 後端
CELERY_CACHE_BACKEND = 'celery'

CACHES = {
    'celery': {
        'BACKEND': 'django.core.cache.backends.db.DatabaseCache',
        'LOCATION': 'celery_cache',
    }
}

第五步

在檢視函式中發起非同步任務啟動命令

# proj/proj/views.py
from .tasks import celery_func

def send_smscode(request):
    ... ...
    func.delay()  # 執行非同步任務
    return Response({"message": "OK"})

第六步

啟動 Celery 工作程式

celery -A proj worker -l info
本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章