首先要了解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應用
)
#還要在同級目錄下建立乙個 celert.py檔案配置celery
import
djcelery
djcelery.setup_loader()
broker_url = '
redis:
'celery_imports = ('
mymac.tasks
')
#然後建立乙個py檔案 建立celert非同步方法導包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))
#在檢視方法匯入寫好的非同步方法,配置好相應路由訪問即可導包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...