Django 非同步任務 定時任務Celery

2022-08-26 16:51:35 字數 3909 閱讀 5150

將任務分配給其他的程序去執行,django的主程序只負責發起任務,而執行任務的不在使用

django

的主程序。

python

有乙個很棒的非同步任務框架,叫做

celery

。django為了讓開發者開發更加方便,整合了

celery,

形成了django-celery

外掛程式1.安裝django-celery

#

redis模組的相容不穩定,必須安裝2.10.6

pip install django-celery

pip install django-redis

pip install redis==2.10.6

2.安裝redis ,解壓到指定目錄

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 配置

#

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

5.然後為了djcelery進行資料庫同步

python manage.py check

python manage.py makemigrations

python manage.py migrate

6.編寫檢視觸發非同步任務

ursl.py

urlpatterns =[

path(

'mtv/

', middle_test_view),

]

views.py 

from celerytask.tasks import

adddef

get_task(request):

num1 = request.get.get("

num1

",1)

num2 = request.get.get("

num2

",2)

add.delay(int(num1),int(num2))

return jsonresponse()

7.啟動celery worker

--loglevel=info 指定日誌級別

python manage.py celery worker --loglevel=info
訪問路由檢視效果。

在settings .py配置

from celery.schedules import

crontab

from celery.schedules import

timedelta

celerybeat_schedule =

}

tasks.py

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註解,可以在方法上標註該註解,說明該方法是非同步方法,也可以標註在類上,表示該類的所有方法都是...