Django 非同步化庫celery和定時任務

2022-08-15 15:51:13 字數 2768 閱讀 9269

首先要了解django其實是個同步框架,那麼多個使用者傳送請求時就會發生排隊的情況上乙個使用者的請求完成後在進行下乙個,這樣會對影響使用者體驗,所有就要用到非同步方法來解決。

首先我們要安裝celery庫

pip install celery   celery的基礎庫

pip install celery-with-redis  celery對redis的庫

pip install django-celery  celery對django的庫

安裝完成後要在settings.py內進行設定

'django.contrib.admin',

'django.contrib.auth',

'django.contrib.contenttypes',

'django.contrib.sessions',

'django.contrib.messages',

'django.contrib.staticfiles',

'demo',

'djcelery'#

新增 djcelery應用

)

#

配置celery

import

djcelery

djcelery.setup_loader()

broker_url = '

redis:

'celery_imports = ('

mymac.tasks

')

還要在同級目錄下建立乙個 celert.py檔案

#

導包import

osimport

django

from celery import

celery

from django.conf import

settings

os.environ.setdefault(

'django_settings_module

', '

mymac.settings')

django.setup()

mymac')

'django.conf:settings')

lambda

defdebug_task(self):

print('

request:

'.format(self.request))

然後建立乙個py檔案 建立celert非同步方法

#

導包import

time

#匯入非同步任務

from celery.task import

task

#task使用裝飾器用法

@task

defsay(x,y):

#稍後用於方便檢視非同步

time.sleep(5)

return x+y

在檢視方法匯入寫好的非同步方法,配置好相應路由訪問即可

from django.shortcuts import

render,redirect#導包

#匯入類檢視

from django.views import

view

#匯入非同步方法

from mymac.tasks import

sayl

defcelery_test(request):

#用delay傳參

非同步測試

')

那怎麼看是否是非同步呢

我們需要在啟動乙個監聽非同步的服務,需要進入你的專案檔案來啟動服務命令是  celery -a mymac worker -l info   mymac為專案名

然後我們去傳送請求,連續重新整理相應請求頁面已達到模擬多個使用者同時訪問

這個時候我們可以看到多個請求在傳送但是我們在方法裡設定了延時5秒所有只傳送並沒有完成

5秒後我們看到都開始相繼完成了

celery內也有定時任務方法 

#

匯入定時任務庫

from celery.decorators import

periodic_task

#利用引數來設定任務週期

@periodic_task(run_every=10)

defsome_task():

print('

每十秒執行一次')

time.sleep(5)

print('

執行完畢')

return true

設定好後就會自動執行 

也可以在  celery -a mymac worker -l info  監聽非同步內監聽因為它本身也是非同步的。

還可以在  celery -a mymac beat -l info  內檢視定時任務。

django初始化資料庫

最近專案需要,需要在表建立好之後,初始化一些資料。django初始化資料的方法有很多,但都需要額外的手動操作,不智慧型。看網上有一種方法用post syncdb訊號來初始化資料庫,但是我用的django版本是1.8,使用python manage.py migrate來同步資料庫,不使用python...

django 初始化資料庫

匯出資料庫內容為初始化檔案 dumpdata 命令 dumpdata 基本資料庫的轉存 manage.py dumpdata db.json manage.py dumpdata admin admin.json dumpdata 備份特定的表 manage.py dumpdata admin.lo...

Django非同步任務執行緒池

當資料庫資料量很大時 百萬級 許多批量資料修改請求的響應會非常慢,一些不需要即時響應的任務可以放到後台的非同步執行緒中完成,發起非同步任務的請求就可以立即響應 選擇用執行緒池的原因是 執行緒比程序更為可控。不像子程序,子執行緒會在所屬程序結束時立即結束。執行緒可共享記憶體。使用python mana...