一、celery與django
關於celery介紹和使用可以檢視上篇Python中任務佇列-芹菜celery的使用
關於django的介紹和使用可檢視python django框架+vue.js前後端分離
我來看一下celery整合到django後的整個工作鏈:django將任務轉發給訊息佇列,celery讀取到任務後執行並將結果通過django ORM 儲存。
在本文中兩個外掛:
- 使用
django-celery-results
將celery處理結果進行ORM儲存 - 使用
django-celery-beat
對任務管理和週期排程
二、基本使用
1.建立一個django專案,不再贅述
建好後目錄看起來是這樣的
django_celery
├── celery_app
│ ├── __init__.py
│ ├── apps.py
│ ├── migrations/
│ ├── models.py
│ ├── admin.py
│ └── views.py
├── manage.py
├── django_celery
│ ├── __init__.py
│ ├── settings.py
│ ├── urls.py
│ └── wsgi.py
└── env/
│── db.sqlite3
安裝外掛
pip install django-celery-results
pip install django-celery-beat
在專案settings.py我們會安裝appcelery_app
、django_celery_results
、django_celery_beat
並開啟我們的admin後臺用於檢視和管理我們的任務排程。
2.新增任務tasks.py
我們在celery_app中新增任務檔案tasks.py其中包含上篇文章中單args_add1任務,並通過shared_task
進行裝飾。
from __future__ import absolute_import
from celery import shared_task
import time
@shared_task
def args_add1(x,y):
print("start task no.1 now!")
time.sleep(10)
print("task no.1 end!")
return x+y
3.配置celery應用
在django_celery目錄下新增celery.py用於建立我們的celery應用
import os
from celery import Celery
#載入配置
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'django_celery.settings')
#建立celery app
app = Celery('django_celery')
app.config_from_object('django.conf:settings', namespace='CELERY')
#自動發現專案中的tasks
app.autodiscover_tasks()
在setting中新增celery相關配置,指定Broker和Backend。這裡我們延用上篇的rabbitmq作為Broker,後端配置為django-db
CELERY_BROKER_URL = 'amqp://rabbit_user:rabbit_pass@i-k9pwet2d/rabbit_vhost'
CELERY_RESULT_BACKEND = 'django-db'
我們的celery應用配置好了,然後我們要啟動它,在__init__.py
中加入我們的app
from .celery import app as celery_app
__all__ = ['celery_app']
4.配置django
通過上面的配置我們有了celery應用,也有了任務,接下來我們配置一個URL請求來傳送我們的任務給celery。
對我們app下views.py編寫如下
from django.http import JsonResponse
from celery_app import tasks
from celery.result import AsyncResult
# Create your views here.
def celery(request,*args,**kwargs):
res=tasks.args_add1.delay(123,456) #傳送任務給celery
result = AsyncResult(res.task_id)
return JsonResponse({'status':result.status,'task_id':result.task_id})
配置路由
from django.contrib import admin
from django.urls import path
import celery_app.views
urlpatterns = [
path('admin/', admin.site.urls),
path('celery/',celery_app.views.celery)
]
5.檢視任務執行
通過上面配置我們基本款已經成了。我們啟動django和celery worker看看
python manage.py migrate
python manage.py runserver
啟動celery worker
celery -A django_celery worker --loglevel=info --concurrency=10
訪問地址:http://127.0.0.1:8000/celery/ 傳送我們的任務,此時任務已處於等待狀態。
在worker終端上可以檢視到任務正在被處理。
我們在django後臺檢視task執行記錄和細節
三、週期性任務排程
在前面我們已經安裝了django-celery-beat
我們在後臺Periodic tasks
中配置我們的週期性任務,也可以通過Crontab Schedule
來配置計劃任務。
我們配置一個每5小時執行一次的任務。
啟動排程器,這樣我們的任務就會在後臺默默無聞的週期性工作啦。
celery -A django_celery beat -l info --scheduler django_celery_beat.schedulers:DatabaseScheduler
以上是celery整合到django中的基礎使用。
文章有不足的地方歡迎指出。
歡迎收藏、點贊、提問。關注頂級飲水機管理員,除了管燒熱水,有時還做點別的。