python django celery的初步使用

2022-07-20 08:30:10 字數 3128 閱讀 4869

celery學習:

什麼是celery?

celery 是乙個簡單、靈活且可靠的,處理大量訊息的分布式系統,並且提供維護這樣乙個系統的必需工具。它專注於實時處理的任務佇列,同時也支援任務排程。

什麼地方可以用到celery?(基礎的兩個用處)

使用者發起request,並且要等待response返回,但是在檢視中有一些耗時的操作,導致使用者可能會等待很長時間才能接受response,使用者體驗差,我們把耗時操作放在celery中執行,便可解決這個問題(處理耗時操作,因為celery 可非同步分布式地非同步處理任務)

**每隔一段時間要同步一次資料,但http請求時是需要觸發的,我們可以通過celery定時執行來解決這個問題(處理資料同步,因為celery可定時執行任務)

安裝celery:

pip install celery

pip install celery-with-redis

# 該命令會自動安裝redis(python庫操作redis的庫)、celery、kombu、billiard、amqp、vine和celery-with-redis相關庫

pip install django-celery

celery操作名詞:

任務 (tssk)

本質是乙個python函式,將耗時操作封裝成了乙個函式

佇列 (queque)

將要執行的任務放佇列裡

工人(worker)

負責執行佇列中的任務

**(broker)

負責排程,在部署環境中使用redis

今天我們主要進行的是耗時操作的處理:

2.在settings.py 檔案最下方新增如下**:

#

配置celery

import

djcelery

djcelery.setup_loader()

#初始化佇列

#中間人redis的埠號/資料庫號

broker_url = '

redis://:redis密碼@127.0.0.1:6379/0'#

0 : 表示使用的是redis第0個庫

#redis為中間人,若不設定中間人,會提示無法連線中間人的錯誤

#中間人:celery執行過程中的資料支援

#celery 內容等訊息的格式設定

celery_accept_content = ['',]

celery_task_serializer = '

json

'celery_result_serializer = '

json'#

selery 時區設定,使用settings中國time_zone同樣的時區

4. 遷移檔案:

生成celery需要的資料庫表(直接遷移不用生成遷移檔案:python manage.py migrate)

5.建立celery.py檔案

在工程目錄(專案級目錄)下的mydiango下建立乙個celery.py檔案

6.在celery.py檔案copy如下內容進去(注:因為celery-with-django版本限制,安裝的celery版本不同,這裡配置的內容可能會不同):

from django.conf import

settings

os.environ.setdefault(

'django_settings_module

', '

whthas_home.settings')

portal')

'django.conf:settings')

lambda

defdebug_task(self):

print('

request:

'.format(self.request))

配置檔案

7.在工程目錄下的mydiango下的__init__.py(即建立celery.py的工程目錄下)中配置如下內容:

首先,我們有乙個耗時操作:

利用time模組在返回頁面前加上sleep模擬耗時操作(注:自行配製urls.py與html檔案):

# views.py

#celery 耗時任務

import

time

defcelery(request):

time.sleep(5) #

延時5秒再執行後面的操作

return render(request,'

')

經驗證頁面需要5秒後才能返回!!

耗時操作的處理:

在進行上面的celery配置後!!

1.將上面的耗時任務剪下到我們建立的task.py檔案中,讓其成為celery任務。

#

task.py

from celery import

task

import

time

@task

#def

text_celery():

time.sleep(5) #

延時5秒再執行後面的操作

3.在原有的views.py檔案中引用task.py 檔案對應方法:

from .task import

test_celery

defcite_celery(request):

test_celery.delay()

#耗時操作的處理

return render(request,'

')

對應url

path('

celery/

',views.cite_celery)

注:在使用celery時,可能會出現kombu錯誤,可能的原因是版本不一致的情況,解決:

併發程式設計 synchronized的初步使用

三 隱式規則 四 選擇合適的鎖 synchronized 內建鎖,又被稱為同步鎖,隱式鎖 當synchronized關鍵字修飾乙個方法或者 塊時,能保證同一時刻最多只有乙個執行緒執行該段 鎖的是當前例項 測試synchronized鎖this和synchronized修飾方法 是否鎖的同乙個物件 如...

python自然語言處理(一)NLTK初步使用

nltk是python很強大的第三方庫,可以很方便的完成很多自然語言處理 nlp 的任務,包括分詞 詞性標註 命名實體識別 ner 及句法分析。一 nltk安裝教程 成功安裝後,測試。輸入下邊的語句就可以 from nltk.corpus import brown brown words the f...

初步了解mysql MySQL的 庫 表初步認識

一 安裝 完全解除安裝 1 引導式安裝 初始化 mysqld initialize insecure 安裝 mysqld install 啟動服務 net start mysql 停止服務 net stop mysql 3 完全解除安裝 控制面板解除安裝 刪除目錄 刪除登錄檔中的mysql內容 看c...