目錄
一、實驗
1.Django使用Celery完成異步和定時任務
二、實驗
1. 如何查看Django版本
一、實驗
1.Django使用Celery完成異步和定時任務
(1)安裝Django
(2)新建Django項目
(3)初始框架
(4)urls.py引用視圖views
from django.contrib import admin
from django.urls import path
from app01 import viewsurlpatterns = [path('admin/', admin.site.urls),path('test/',views.test)
]
(5)編寫view
from django.shortcuts import render,HttpResponse# Create your views here.
def test(request):return HttpResponse("OK")
(6)點擊運行
(7)查看運行結果,點擊鏈接
(8)顯示OK
http://127.0.0.1:8000/test/
(9)新建消費者目錄mycelery
(10)tasks.py文件定義異步或定時任務
(11)編寫配置文件config.py
#消息中間件
broker_url = 'redis://127.0.0.1:6379/15'
#異步存儲地方
result_backend = 'redis://127.0.0.1:6379/14'
(12)main.py將配置文件解耦
# -*- coding: utf-8 -*-
# 主程序
import os
import celery as celery
from celery import Celery
import eventlet
# 創建celery實例對象
app = Celery("djcelery")
# 把celery和django進行組合,識別和加載django的配置文件
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'celeryPros.settings.dev')
# 通過app對象加載配置
app.config_from_object("mycelery.config")
# 加載任務
# 參數必須必須是一個列表,里面的每一個任務都是任務的路徑名稱
# app.autodiscover_tasks(["任務1","任務2"])
app.autodiscover_tasks(["mycelery.sms",])
(13)tasks文件
# -*- coding: utf-8 -*-
# celery的任務必須寫在tasks.py的文件中,別的文件名稱不識別!!!
from mycelery.main import app
import time
import logging
log = logging.getLogger("django")
@app.task # name表示設置任務的名稱,如果不填寫,則默認使用函數名做為任務名
def send_sms(mobile):"""發送短信"""print("向手機號%s發送短信成功!"%mobile)time.sleep(5)return "send_sms OK"
@app.task # name表示設置任務的名稱,如果不填寫,則默認使用函數名做為任務名
def send_sms2(mobile):print("向手機號%s發送短信成功2!"%mobile)time.sleep(5)return "send_sms2 OK"
(14)view視圖添加異步代碼
from django.shortcuts import render,HttpResponse
# Create your views here.
from mycelery.sms.tasks import send_sms,send_sms2
def test(request):#異步任務# 1. 聲明一個和celery一模一樣的任務函數,但是我們可以導包來解決# send_sms.delay("139XXXXXXXX")# send_sms2.delay("135XXXXXXXX")# send_sms.delay() 如果調用的任務函數沒有參數,則不需要填寫任何內容
(15)瀏覽器刷新或回車,進行觀察
(16)消費者一方配置完成
(17)?mycelery根目錄
(18)已啟動消費
PS D:\soft\Djcelery> celery --app=mycelery.main worker -n node1 -l INFO -P eventlet
(19)查看異步消息
(20)注釋異步任務代碼
(21)添加定時任務代碼
#定時任務from datetime import datetime,timedeltactime = datetime.now()# 默認用utc時間utc_ctime = datetime.utcfromtimestamp(ctime.timestamp())time_delay = timedelta(seconds=10)task_time = utc_ctime + time_delayresult = send_sms.apply_async(["136XXXXXXXX", ], eta=task_time)print(result.id)
(22)瀏覽器再次刷新或回車,進行觀察
(23)查看定時消息
(24)查看RUN結果
(25)完整項目架構
(26)查看Redis可視化界面
二、實驗
1. 如何查看Django版本
(1)方式一
indows系統下,在cmd命令窗口中輸入python進入Python解釋器
Linux系統下, 直接使用終端調用Python解釋器接下來輸入:
>>> import django
>>> print django.VERSION # Python2的格式
>>> print(django.VERSION) # Python3的格式 或者輸入:
>>> django.get_version() # 獲取當前djiango版本號
(2)方式二
在IDE內 的terminal 內輸入python -m django --versiondjango-admin --version這兩個命令 一樣可以查詢到。注意:通常在項目的目錄下查詢。這種方式適合項目已經建立,虛擬Python環境也已經配置好。Django不是全局安裝的時候。
(3)方式三
Windows系統下,在cmd命令窗口中輸入python進入Python解釋器Linux系統下,直接使用終端調用Python解釋器直接輸入:
python -m django --versiondjango-admin --version注意:這里django是全局安裝。
(4)方法四
在項目目錄下的lib文件夾內的site-packpage文件夾內直接可以看到Django版本。