Django項目中使用Celery

官方參考文檔https://docs.celeryproject.or...html

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

安裝

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文件下導入上面建立的模塊, 代碼以下:django

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

第四步

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

  • 安裝 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
相關文章
相關標籤/搜索