異步測試celery

 

 

django異步請求:html

Django從一個http請求發起,到得到響應返回html頁面的流程大體以下:http請求發起 -- http handlingrequest解析) -- url mappingurl正則匹配找到對應的View-- View中進行邏輯的處理、數據計算(包括調用Model類進行數據庫的增刪改查)--將數據推送到template,返回對應的template/responseredis

 

同步請求與異步請求的區別:數據庫

同步請求:全部邏輯處理、數據計算任務在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

 

# 導包
import time
# 導入異步任務
from celery.task import task
# 導入定時任務庫
from celery.decorators import periodic_task


# 定時任務,使用參數來設置任務週期
@periodic_task(run_every=10)
def some_task():
print('每十秒執行一次')
time.sleep(5)
print('執行完畢')
return True


@task
def say(x,y):
time.sleep(5)
return x+y
 
 
 
運行ython manage.py celery flower命令:
相關文章
相關標籤/搜索