上一片博客記錄瞭如何入門級的使用celery,這裏記錄的是如何在Django框架中使用celerypython
首先假設你的Django項目是這樣的redis
- proj/ - manage.py - proj/ - __init__.py - settings.py - urls.py
而後在你的項目下面建立celery.py文件,proj/proj/celery.py,以後就能夠在裏面寫你須要執行的task任務函數django
from __future__ import absolute_import, unicode_literals import os from celery import Celery # 設置Django的settings目錄 os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'proj.settings') app = Celery('proj' broker='amqp://', backend='amqp://') # 這裏聲明的是和celery相關的配置命名必須是以CELERY開頭的,這關於上一片博客的配置方法第三種 app.config_from_object('django.conf:settings', namespace='CELERY') # 這裏聲明的是自動加載全部在django settings裏面註冊的app下面的tasks.py app.autodiscover_tasks() @app.task(bind=True) def debug_task(self): print('Request: {0!r}'.format(self.request))
在第一行中的from __future__ import absolute_import, unicode_literals,是聲明接下來的導入都是絕對路徑的導入,防止在導入celery的時候出現衝突app
以後就能夠在你的proj/proj/__init__.py文件下面註冊你的celery了框架
from __future__ import absolute_import, unicode_literals # 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 __all__ = ('celery_app',)
上面的英文意思是這確保了你的django啓動的時候celery的app對象一直被導入狀態,當你使用shared_task裝飾器裝飾的task函數的是就會使用這個app對象,接下來配合上面的app.autodiscover_tasks()一塊兒說明,上面聲明瞭app.autodiscover_tasks會加載全部app下全部的task,假設你的目錄結構以下函數
- app1/ - tasks.py - models.py - app2/ - tasks.py - models.py
接下來你就能夠使用shared_task,在tasks.py文件中this
# Create your tasks here from __future__ import absolute_import, unicode_literals from celery import shared_task @shared_task def add(x, y): return x + y @shared_task def mul(x, y): return x * y @shared_task def xsum(numbers): return sum(numbers)
這個shared_task就確保了你的__init__.py下聲明的celery_app就會在這裏被使用,而不須要重複聲明。url
celery worker -A proj -l info
celery multi start w1 -A proj -l info
重啓spa
celery multi restart w1 -A proj -l info
中止debug
celery multi stop w1 -A proj -l info
你除了能夠用redis做爲celery的代理以外還能夠使用django自帶的orm/cache
首先安裝拓展
pip install django-celery-results
在Django設置的installed下面添加
INSTALLED_APPS = ( ..., 'django_celery_results', )
執行
python manage.py migrate celery_results
若是你使用了django的settings做爲celery配置文件
添加
CELERY_RESULT_BACKEND = 'django-db'
和
CELERY_CACHE_BACKEND = 'django-cache'