1. 程式人生 > >django2.1 celery 分散式跨平臺 任務管理

django2.1 celery 分散式跨平臺 任務管理

django2.1 celery 分散式跨平臺 任務管理

記錄django與celery組合,實現任務管理系統的步驟。

  • django-celery-beat :定時傳送任務,根據cron表示式或間隔時間 按時分發任務到worker;
  • django-celery-results :儲存執行結果。

文章目錄

一、Celery

專案依賴一些庫,先根據官方教程django教程安裝並配置好
包括但可能不限於以下:

pip install django
sudo apt-get install rabbitmq-server
pip install celery
sudo apt install python-celery-common
pip install eventlet
pip install django_celery_results
pip install django_celery_beat
pip install beautifulsoup4
sudo
apt-get -y install mysql-server mysql-client libmysqlclient-dev mytop pip install mysqlclient pip install lxml

配置celery

from __future__ import absolute_import, unicode_literals
import os
from celery import Celery
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'TaskTimer.settings')
app = Celery(
'TaskTimer') # force=True 很重要,沒有的話不會載入settin.py中的部分配置 app.config_from_object('django.conf:settings', namespace='CELERY', force=True) app.autodiscover_tasks()

force=True 很重要,沒有的話不會載入settin.py中的部分配置

配置setting. py

在INSTALLED_APPS中新增

'django_celery_beat',
'django_celery_results',

在檔案尾新增

CELERY_RESULT_BACKEND = 'django-db'
CELERY_BROKER_URL= 'amqp://tasktimer:[email protected]/tasktimer-vhost'
CELERY_TIMEZONE='Asia/Shanghai'  #並沒有北京時區,與TIME_ZONE應該一致
CELERY_CELERYBEAT_SCHEDULER = 'django_celery_beat.schedulers:DatabaseScheduler'
from kombu import Exchange, Queue

CELERY_DEFAULT_QUEUE = 'default'
CELERY_QUEUES = (
    Queue('default', Exchange('default'), routing_key='default'),
    Queue('matcher', Exchange('matcher'), routing_key='matcher.#'),
)
CELERY_DEFAULT_EXCHANGE = 'default'
CELERY_DEFAULT_EXCHANGE_TYPE = 'topic'
CELERY_DEFAULT_ROUTING_KEY = 'default'
CELERY_TASK_ROUTES = {
    'worker_matcher.tasks.runcmd': {'queue': 'matcher', 'routing_key': 'matcher.runcmd', },
    '*': {'queue': 'default', 'routing_key': 'default', },
}

任務先根據CELERY_TASK_ROUTES路由到對應佇列,再根據佇列名稱分配到相應worker

二、網站配置

在這裡插入圖片描述

三、worker配置

待新增