將任務分配給其他的程序去執行,django的主程序只負責發起任務,而執行任務的不在使用
django
的主程序。
python
有乙個很棒的非同步任務框架,叫做
celery
。django為了讓開發者開發更加方便,整合了
celery,
形成了django-celery
外掛程式1.安裝django-celery
#2.安裝redis ,解壓到指定目錄redis模組的相容不穩定,必須安裝2.10.6
pip install django-celery
pip install django-redis
pip install redis==2.10.6
redis-x64-3.2.100.zip 提取碼: jmbf
啟動redis
redis-server.exe redis.windows.conf
#關閉redis
redis-cli.exe
shutdown
django-celery只是將任務發布出去,讓長時間的任務:
爬取乙個**,傳送乙個驗證碼這樣的工作,不再阻塞主線程,web伺服器只負責發起任務和接受任務的結果,中間執行的部分交給其他執行緒、程序、伺服器去做。
1、在settings當中配置
下面也是settings.py 配置
#5.然後為了djcelery進行資料庫同步celery 配置
import
djcelery
djcelery.setup_loader()
#模組載入
broker_url = '
redis:'#
任務容器位址,redis資料庫位址
celery_imports = ('
celerytask.tasks
') #
具體任務檔案
celery_timezone = '
asia/shanghai'#
celery 時區
celerybeat_scheduler = '
djcelery.schedulers.databasescheduler'#
celey處理器,固定
2.建立使用celery的
在專案的主目錄下,編寫celery的控制檔案,
(控制檔案的名字最好是
#設定celery的環境變數和django-celery的工作目錄
os.environ.setdefault("
django_settings_module
","celerytask.settings")
#例項化celery應用,傳入伺服器名稱
art_project")
#載入celery配置
django.conf:settings")
#3.新建tasks.py在
下
4.編寫tasks.py檔案
from
__future__
import
absolute_import
from qshop.celery import
defadd(x,y):
return x+y
python manage.py check6.編寫檢視觸發非同步任務python manage.py makemigrations
python manage.py migrate
ursl.py
urlpatterns =[views.pypath(
'mtv/
', middle_test_view),
]
from celerytask.tasks import7.啟動celery workeradddef
get_task(request):
num1 = request.get.get("
num1
",1)
num2 = request.get.get("
num2
",2)
add.delay(int(num1),int(num2))
return jsonresponse()
--loglevel=info 指定日誌級別
python manage.py celery worker --loglevel=info訪問路由檢視效果。
在settings .py配置
from celery.schedules importtasks.pycrontab
from celery.schedules import
timedelta
celerybeat_schedule =
}
def sendding(content="
定時任務執行
",to="
15037609692"):
headers =
requests_data =,
"at":
}ifto:
requests_data["at
"]["
atmobiles
" requests_data["at
"]["
isatall
"] =false
else
: requests_data["at
"]["
atmobiles
"].clear()
requests_data["at
"]["
isatall
"] =true
senddata =json.dumps(requests_data)
response = requests.post(url=ding_url, headers=headers, data=senddata)
content =response.json()
return content
啟動worker
python manage.py celery worker --loglevel=info啟動定時任務
python manage.py celerybeat --loglevel=info注意:需要啟動的有,django專案,redis資料庫,worker,定時任務
非同步任務 定時任務
一 在主程式開啟非同步註解功能 enableasync enableasync 開啟非同步註解功能 public class 二 標明非同步類 asyns service async 表注該類為非同步類 public class asynservice catch interruptedexcept...
django定時任務
網上很多資料都是比較舊的,不同的版本使用上存在差異,最好的方式是,根據使用的版本檢視官方資料 任務執行結果 安裝 pip install django crontab pip install apscheduler pip install django apscheduler pip install...
SpringBoot非同步任務與定時任務
使用步驟 啟動類裡面使用 enableasync註解開啟非同步任務 enableasync 開啟非同步功能 public class 編寫非同步任務 在springboot中,非同步任務可以使用 async註解,可以在方法上標註該註解,說明該方法是非同步方法,也可以標註在類上,表示該類的所有方法都是...