Django+Celery實(shí)現(xiàn)動(dòng)態(tài)配置定時(shí)任務(wù)的方法示例
哈嘍,今天給大家分享一篇Django+Celery實(shí)現(xiàn)動(dòng)態(tài)配置定時(shí)任務(wù),因?yàn)樽罱彩菬o意間看到一位大佬關(guān)于這塊的文章,然后自己覺得不錯(cuò),也想學(xué)習(xí)寫一下,然后最終實(shí)現(xiàn)功能是在前端頁面統(tǒng)一管理計(jì)劃任務(wù),大家可以在admin管理頁面設(shè)置,也可以在自己寫的前端頁面刪除添加編輯,實(shí)時(shí)生效,還可以監(jiān)控這些監(jiān)控任務(wù)是否運(yùn)行成功失敗。
補(bǔ)充:如果大家對(duì)celery不熟悉的話,建議先學(xué)習(xí)celery
一、安裝
1.在Linux系統(tǒng)上安裝模塊
celery (3.1.26.post2) celery-with-redis (3.0) redis (2.10.6) Django (2.1.10) django-celery (3.3.1)
2.遷移生成表
python manage.py migrate
3.查看生成的表,這幾張表是上面執(zhí)行命令后生成的
二、配置
1.添加apps
INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'djcelery', #這是要添加的 ]
2.配置django時(shí)區(qū)
LANGUAGE_CODE = 'en-us' TIME_ZONE = 'Asia/Shanghai' USE_I18N = True USE_L10N = True USE_TZ = False
3.Celery配置
BROKER_URL = 'redis://localhost:6379' #代理人 CELERY_RESULT_BACKEND = 'redis://localhost:6379' #結(jié)果存儲(chǔ)地址 CELERY_ACCEPT_CONTENT = ['application/json'] #指定任務(wù)接收的內(nèi)容序列化類型 CELERY_TASK_SERIALIZER = 'json' #任務(wù)序列化方式 CELERY_RESULT_SERIALIZER = 'json' #任務(wù)結(jié)果序列化方式 CELERY_TASK_RESULT_EXPIRES = 12 * 30 #超過時(shí)間 CELERY_MESSAGE_COMPRESSION = 'zlib' #是否壓縮 CELERYD_CONCURRENCY = 4 #并發(fā)數(shù)默認(rèn)已CPU數(shù)量定 CELERYD_PREFETCH_MULTIPLIER = 4 #celery worker 每次去redis取任務(wù)的數(shù)量 CELERYD_MAX_TASKS_PER_CHILD = 3 #每個(gè)worker最多執(zhí)行3個(gè)任務(wù)就摧毀,避免內(nèi)存泄漏 CELERYD_FORCE_EXECV = True #可以防止死鎖 CELERY_ENABLE_UTC = False #關(guān)閉時(shí)區(qū) CELERYBEAT_SCHEDULER = 'djcelery.schedulers.DatabaseScheduler' # 定時(shí)任務(wù)調(diào)度器
4.在你項(xiàng)目的app下面配置celery.py
import os from celery import Celery,platforms from django.conf import settings os.environ.setdefault('DJANGO_SETTINGS_MODULE','blog.settings') app = Celery('blog') app.config_from_object('django.conf:settings') app.autodiscover_tasks(lambda: settings.INSTALLED_APPS) platforms.C_FORCE_ROOT = True @app.task(bind=True) def debug_task(self): print('Request: {0!r}'.format(self.request))
5.配置剛才app下面的__init__.py文件
from __future__ import absolute_import from .celery import app as celery_app
6.在app下面創(chuàng)建一個(gè)tasks.py文件
from blog.celery import app @app.task() def get_date(x,y,s): #這里的函數(shù)留意一下,后面會(huì)用到 print(s) return x + y @app.task() def get_task(): return 'test' @app.task() def get_command_task(): return 'success'
三、啟動(dòng)
1.進(jìn)入你項(xiàng)目下面,執(zhí)行啟動(dòng)worker,Worker是執(zhí)行任務(wù)的單元,它實(shí)時(shí)監(jiān)控消息隊(duì)列,如果有任務(wù)就獲取任務(wù)并執(zhí)行它。
celery -A autoops worker -l info
2.進(jìn)入你項(xiàng)目下面,執(zhí)行啟動(dòng)beat,beat是定時(shí)把這個(gè)任務(wù)扔到隊(duì)列中
celery -A autoops beat -l info
3.啟動(dòng)你的django項(xiàng)目
python manage.py runserver 192.168.10.133:8001
4.頁面展示
4.1這個(gè)是admin頁面下的,然后我自己重新寫了,大家也可以自己寫一個(gè),admin和我自己寫的頁面實(shí)現(xiàn)的功能其實(shí)是一模一樣的。
4.2.對(duì)應(yīng)admin頁面的crontabs
添加周期
編輯修改周期
5.tasks任務(wù)
5.1.大家可以看到我添加了一個(gè)名為測(cè)試的任務(wù),每隔一分鐘執(zhí)行一次,任務(wù)模板其實(shí)就是你寫的tasks文件里面函數(shù)
看一下worker進(jìn)程日志輸出
四、監(jiān)控計(jì)劃任務(wù)
celery作為一個(gè)分布式異步任務(wù)隊(duì)列管理工具,通過界面化的方式來進(jìn)行管控任務(wù)的執(zhí)行狀態(tài)和查看任務(wù)執(zhí)行結(jié)果
flower作為web頁面來管理celery后臺(tái)任務(wù),和任務(wù)隊(duì)列是隔離的,也就是flower的運(yùn)行與否并不會(huì)影響到任務(wù)隊(duì)列的真正執(zhí)行,但是flower中可以通過API接口來管理celery中的任務(wù)執(zhí)行。
4.1安裝flower,監(jiān)控celery計(jì)劃任務(wù)
pip3 install flower==0.9.2 -i http://pypi.douban.com/simple --trusted-host pypi.douban.com pip install tornado==5.1.1 celery flower -A blog --port=5555 #進(jìn)入項(xiàng)目目錄啟動(dòng)flower
4.2打開瀏覽器,輸入http://ip:5555 查看
Name: 表示該任務(wù)的名稱,默認(rèn)規(guī)則為該函數(shù)的路徑規(guī)則,例如 {模塊名}.{文件名}.{函數(shù)名}
UUID: 表示一個(gè)唯一字符串ID用于表示該任務(wù)
State: 表示該任務(wù)的狀態(tài),包括: SUCCESS / FAILURE / STARTED / RECEIVED
SUCCESS 表示該任務(wù)執(zhí)行完畢且成功
FAILURE 表示該任務(wù)執(zhí)行失敗
STARTED 表示該任務(wù)正在執(zhí)行
RECEIVED 表示該任務(wù)在worker中,只是被接收而已
args: 表示該任務(wù)的列表參數(shù)
kwargs: 表示該任務(wù)的字典參數(shù)
Result: 表示該任務(wù)函數(shù)的返回結(jié)果
Received: 表示該任務(wù)在worker接收到的時(shí)間
Started: 表示該任務(wù)在worker開始執(zhí)行的時(shí)間
Runtime: 表示該任務(wù)在worker真正執(zhí)行的耗時(shí)(單位:秒)
Worker: 表示該任務(wù)所在的worker名稱
總結(jié):django+celery實(shí)現(xiàn)的定時(shí)任務(wù)還是不錯(cuò)的,你可以在前端上查看管理所有定時(shí)任務(wù),實(shí)時(shí)修改生效刪除和禁用,所以有需求的話可以去試試。下次再分享啦
到此這篇關(guān)于Django+Celery實(shí)現(xiàn)動(dòng)態(tài)配置定時(shí)任務(wù)的方法示例的文章就介紹到這了,更多相關(guān)Django Celery動(dòng)態(tài)配置定時(shí)任務(wù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- django中celery的定時(shí)任務(wù)使用
- django-celery-beat搭建定時(shí)任務(wù)的實(shí)現(xiàn)
- Django初步使用Celery處理耗時(shí)任務(wù)和定時(shí)任務(wù)問題
- 關(guān)于Django使用 django-celery-beat動(dòng)態(tài)添加定時(shí)任務(wù)的方法
- Django+Celery實(shí)現(xiàn)定時(shí)任務(wù)的示例
- Django實(shí)現(xiàn)celery定時(shí)任務(wù)過程解析
- Django中使用Celery執(zhí)行定時(shí)任務(wù)問題
相關(guān)文章
使用Python代碼實(shí)現(xiàn)PDF文檔與SVG文件之間的轉(zhuǎn)換
PDF作為普遍采用的文件格式,確保了文檔的一致性和可靠性,而SVG(可縮放矢量圖形)則因其矢量性質(zhì),在網(wǎng)頁設(shè)計(jì)、高分辨率打印及動(dòng)態(tài)交互內(nèi)容中展現(xiàn)出無與倫比的優(yōu)勢(shì),本文將介紹如何使用Python將PDF文件轉(zhuǎn)換為SVG文件以及將SVG文件轉(zhuǎn)換為PDF文件,需要的朋友可以參考下2024-05-05Python必備shelve與dbm本地持久化存儲(chǔ)數(shù)據(jù)的兩個(gè)強(qiáng)大工具
當(dāng)涉及存儲(chǔ)大量數(shù)據(jù)并且需要高效訪問時(shí),shelve和dbm模塊是Python中用于本地持久化存儲(chǔ)數(shù)據(jù)的兩個(gè)強(qiáng)大工具,它們?cè)试S開發(fā)人員以鍵值對(duì)的形式存儲(chǔ)數(shù)據(jù),并支持快速的檢索和更新操作,在本文將深入探討這兩個(gè)模塊,展示它們的優(yōu)勢(shì)和應(yīng)用場(chǎng)景2024-01-01利用Python開發(fā)微信支付的注意事項(xiàng)
如今支付的引入是很多互聯(lián)網(wǎng)產(chǎn)品都需要的。為了讓用戶用著更方便快捷,集成像支付寶、微信支付這樣的第三方支付也就成了常有的事。今天跟著小編就來看看微信支付開發(fā)中幾個(gè)值得注意的地方,涉及代碼之處均用 Python 編寫。2016-08-08Python對(duì)Excel進(jìn)行處理的實(shí)操指南
這篇文章主要給大家介紹了關(guān)于Python對(duì)Excel進(jìn)行處理的實(shí)操指南,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-03-03在Django中Pyecharts生成圖表實(shí)現(xiàn)
pyecharts是支持python的一種可視化,那么在Django中Pyecharts如何生成圖表,主要有兩種方法,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-05-05用Python從0開始實(shí)現(xiàn)一個(gè)中文拼音輸入法的思路詳解
中文輸入法是一個(gè)歷史悠久的問題,但也實(shí)在是個(gè)繁瑣的活,不知道這是不是網(wǎng)上很少有人分享中文拼音輸入法的原因,接下來通過本文給大家分享使用Python從0開始實(shí)現(xiàn)一個(gè)中文拼音輸入法,需要的朋友可以參考下2019-07-07Python基于win32ui模塊創(chuàng)建彈出式菜單示例
這篇文章主要介紹了Python基于win32ui模塊創(chuàng)建彈出式菜單,結(jié)合實(shí)例形式分析了Python使用win32ui模塊創(chuàng)建彈出式菜單的具體步驟與相關(guān)操作技巧,并附帶說明了win32ui模塊的安裝命令,需要的朋友可以參考下2018-05-05