celery學習:
什麼是celery?
celery 是乙個簡單、靈活且可靠的,處理大量訊息的分布式系統,並且提供維護這樣乙個系統的必需工具。它專注於實時處理的任務佇列,同時也支援任務排程。
什麼地方可以用到celery?(基礎的兩個用處)
使用者發起request,並且要等待response返回,但是在檢視中有一些耗時的操作,導致使用者可能會等待很長時間才能接受response,使用者體驗差,我們把耗時操作放在celery中執行,便可解決這個問題(處理耗時操作,因為celery 可非同步分布式地非同步處理任務)
**每隔一段時間要同步一次資料,但http請求時是需要觸發的,我們可以通過celery定時執行來解決這個問題(處理資料同步,因為celery可定時執行任務)
安裝celery:
pip install celerycelery操作名詞:pip install celery-with-redis
# 該命令會自動安裝redis(python庫操作redis的庫)、celery、kombu、billiard、amqp、vine和celery-with-redis相關庫
pip install django-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經驗證頁面需要5秒後才能返回!!#celery 耗時任務
import
time
defcelery(request):
time.sleep(5) #
延時5秒再執行後面的操作
return render(request,'
')
耗時操作的處理:
在進行上面的celery配置後!!
1.將上面的耗時任務剪下到我們建立的task.py檔案中,讓其成為celery任務。
#3.在原有的views.py檔案中引用task.py 檔案對應方法:task.py
from celery import
task
import
time
@task
#def
text_celery():
time.sleep(5) #
延時5秒再執行後面的操作
from .task import對應urltest_celery
defcite_celery(request):
test_celery.delay()
#耗時操作的處理
return render(request,'
')
path('注:在使用celery時,可能會出現kombu錯誤,可能的原因是版本不一致的情況,解決:celery/
',views.cite_celery)
併發程式設計 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...