django異步請求:html
Django從一個http請求發起,到得到響應返回html頁面的流程大體以下:http請求發起 -- http handling(request解析) -- url mapping(url正則匹配找到對應的View) -- 在View中進行邏輯的處理、數據計算(包括調用Model類進行數據庫的增刪改查)--將數據推送到template,返回對應的template/response。redis
同步請求與異步請求的區別:數據庫
同步請求:全部邏輯處理、數據計算任務在View中處理完畢後返回response。在View處理任務時用戶處於等待狀態,直到頁面返回結果。django
異步請求:View中先返回response,再在後臺處理任務。用戶無需等待,能夠繼續瀏覽網站。當任務處理完成時,咱們能夠再告知用戶。session
celery安裝包:app
pip install celerycors
pip install celery-with-redis框架
pip install django-celery異步
celery執行命令:async
celery -A myproject beat -l info 定時任務
celery -A mymac worker -l info 異步任務
開兩個黑窗口,黑窗口下先執行異步任務,在執行定時任務
在第一次運行異步任務時會報asymc錯,此時咱們須要改celery的源代碼。
把async改爲async_my.
所須要需改的文件:
C:\Python37\Lib\site-packages\celery\utils路徑 (必須先修改)
celery/utils/timer2.py
/concurrency/asynpool.py
kombu/transport/redis.py
celery/worker/auto_scale.py,components,consumer,strategy
例:
也可能會出現庫不匹配,這時咱們須要降版本處理:
先刪除/:
pip uninstall redis
指定版本號
pip install redis==2.10.6
Celery是基於Python開發的一個分佈式任務隊列框架,支持使用任務隊列的方式在分佈的機器/進程/線程上執行任務調度。
配置文件
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'mymac',
'myapp',
'corsheaders',
'djcelery',
]
#配置celery
import djcelery
djcelery.setup_loader()
BROKER_URL = 'redis://127.0.0.1:6379'
CELERY_IMPORTS = ('mymac.tasks')
Celery.py
#導包
import os
import django
from celery import Celery
from django.conf import settings
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'mymac.settings')
django.setup()
app = Celery('mymac')
app.config_from_object('django.conf:settings')
app.autodiscover_tasks(lambda: settings.INSTALLED_APPS)
@app.task(bind=True)
def debug_task(self):
print('Request: {0!r}'.format(self.request))
tasks.py