Django 3.0 + Celery 4.4 + RabbitMQ


參考文檔:http://docs.celeryproject.org/en/latest/django/first-steps-with-django.html

 

Celery是一個簡單、靈活且可靠的,處理大量消息的分布式系統;

專注於實時處理的異步任務隊列,Django利用Celery可以實現異步任務處理。

 

1.版本說明

Django: 3.0

Celery: 4.4

RabbitMQ: 3.8.2

Django項目名稱: HttpRestServer

Django應用名稱: app01

 

2.創建celery.py文件

在Django項目的settings.py文件同一級目錄下創建文件 celery.py,內容如下:

from __future__ import absolute_import, unicode_literals import os from celery import Celery # set the default Django settings module for the 'celery' program.
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'HttpRestServer.settings') # 替換 HttpRestServer 為你Django項目的名稱 app = Celery('HttpRestServer')  # 替換 HttpRestServer 為你Django項目的名稱 
app.conf.task_default_queue = 'app01' # 默認隊列名稱為Celery
# Using a string here means the worker doesn't have to serialize # the configuration object to child processes. # - namespace='CELERY' means all celery-related configuration keys # should have a `CELERY_` prefix. app.config_from_object('django.conf:settings', namespace='CELERY') # Load task modules from all registered Django app configs. app.autodiscover_tasks() @app.task(bind=True) def debug_task(self): print('Request: {0!r}'.format(self.request))

 

3.配置settings.py

在Django項目的settings.py中添加以下配置

# Celery Config
CELERY_TIMEZONE = 'Asia/Shanghai' CELERY_BROKER_URL = 'amqp://user:password@rabbitmq-ip:5672' # 將rabbitmq 用戶名、密碼和IP替換為你的環境 CELERY_RESULT_BACKEND = 'amqp://user:password@rabbitmq-ip:5672' # 將rabbitmq 用戶名、密碼和IP替換為你的環境
 
        

 

4.配置__init__.py

在Django項目的settings.py文件同一級目錄下的__init__.py文件中添加以下內容:

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',)

 

5.創建tasks.py

在Django項目的應用app01文件夾下創建 tasks.py文件,內容如下:

# 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

 

6.啟動Celery

進入Django項目的manage.py這一層級路徑,執行以下命令:

$ celery -A HttpRestServer worker -l info

 

7.調用Celery

進入Django項目的manage.py這一層級路徑,執行以下命令:

$ python3 manage.py shell
>>> from app01.tasks import add, mul
>>> res = add.delay(2, 4)
>>> res.id
'893c31ab-e32f-44ee-a321-8b07e9483063'
>>> res.state
'SUCCESS'
>>> res.result
6

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM