關(guān)于Django使用 django-celery-beat動(dòng)態(tài)添加定時(shí)任務(wù)的方法
版本信息
# 插件安裝 Django==2.2.2 django-celery-beat==2.1.0 django-redis==4.8.0 mysqlclient==2.0.0 django-mysql==3.2.0 redis==3.2.1 uWSGI==2.0.17.1 django-redis-cache==2.1.0
安裝與配置
- 安裝上面的對(duì)應(yīng)的celery版本
- 配置settings.py
# django時(shí)區(qū)配置 TIME_ZONE = 'Asia/Shanghai' # 如果USE_TZ設(shè)置為T(mén)rue時(shí),Django會(huì)使用系統(tǒng)默認(rèn)設(shè)置的時(shí)區(qū),此時(shí)的TIME_ZONE不管有沒(méi)有設(shè)置都不起作用 # 如果USE_TZ 設(shè)置為False,TIME_ZONE = 'Asia/Shanghai', 則使用上海的UTC時(shí)間。 USE_TZ = False INSTALLED_APPS = ( ..., 'django_celery_beat', ) # celery beat配置 # CELERY_ENABLE_UTC = False CELERY_TIMEZONE = TIME_ZONE DJANGO_CELERY_BEAT_TZ_AWARE = False CELERY_BEAT_SCHEDULER = 'django-celery-beat.schedulers.DatabaseScheduler' # celery 的啟動(dòng)工作數(shù)量設(shè)置 CELERY_WORKER_CONCURRENCY = 10 # 任務(wù)預(yù)取功能,會(huì)盡量多拿 n 個(gè),以保證獲取的通訊成本可以壓縮。 CELERYD_PREFETCH_MULTIPLIER = 20 # 有些情況下可以防止死鎖 CELERYD_FORCE_EXECV = True # celery 的 worker 執(zhí)行多少個(gè)任務(wù)后進(jìn)行重啟操作 CELERY_WORKER_MAX_TASKS_PER_CHILD = 100 # 禁用所有速度限制,如果網(wǎng)絡(luò)資源有限,不建議開(kāi)足馬力。 CELERY_DISABLE_RATE_LIMITS = True # 設(shè)置代理人broker CELERY_BROKER_URL = 'redis://127.0.0.1:6379/2' # 指定 Backend CELERY_RESULT_BACKEND = 'redis://127.0.0.1:6379/1'
生成數(shù)據(jù)庫(kù)
python manage.py migrate
# 遷移之后生成的表結(jié)構(gòu) django_celery_beat.models.PeriodicTask 此模型定義要運(yùn)行的單個(gè)周期性任務(wù)。 django_celery_beat.models.IntervalSchedule 以特定間隔(例如,每5秒)運(yùn)行的計(jì)劃。 django_celery_beat.models.CrontabSchedule 與像在cron項(xiàng)領(lǐng)域的時(shí)間表 分鐘小時(shí)日的一周 DAY_OF_MONTH month_of_year django_celery_beat.models.PeriodicTasks 此模型僅用作索引以跟蹤計(jì)劃何時(shí)更改
在工作目錄下配置celery.py
# -*- coding: utf-8 -*- # @File: celeryc.py # @Content: celery定時(shí)任務(wù)配置 import os from celery import Celery, platforms from celery.schedules import crontab from django.conf import settings os.environ.setdefault("DJANGO_SETTINGS_MODULE", "django_server.settings") app = Celery("django_server") app.config_from_object("django.conf:settings", namespace="CELERY") # 定時(shí)任務(wù)的存放位置 app.autodiscover_tasks(["monitoring.tasks", "wechat.tasks"])
創(chuàng)建tasks任務(wù)
from celery import shared_task @shared_task def alarm_monitor_task(**kwargs): print("定時(shí)任務(wù)!??!")
創(chuàng)建定時(shí)任務(wù)
from django_celery_beat.models import PeriodicTask, IntervalSchedule -----周期性任務(wù) # 創(chuàng)建10分鐘的間隔 interval 對(duì)象 schedule, _ = IntervalSchedule.objects.update_or_create(every=10, period=IntervalSchedule.MINUTES) # 如果任務(wù)存在就更新,不存在則創(chuàng)建 PeriodicTask.objects.update_or_create( defaults={ "interval": schedule, # 上面創(chuàng)建10分鐘的間隔 interval 對(duì)象 "task": "monitoring.tasks.alarm_monitor_task", # 指定需要周期性執(zhí)行的任務(wù) "args"=json.dumps(['arg1', 'arg2']), "kwargs": json.dumps({"a": 1, "b": 2}, ensure_ascii=False) # 傳入的參數(shù) }, name="定時(shí)任務(wù)-task", ) # 周期性任務(wù)可選參數(shù) IntervalSchedule.DAYS 固定間隔天數(shù) IntervalSchedule.HOURS 固定間隔小時(shí)數(shù) IntervalSchedule.MINUTES 固定間隔分鐘數(shù) IntervalSchedule.SECONDS 固定間隔秒數(shù) IntervalSchedule.MICROSECONDS 固定間隔微秒 ----Crontab 周期性任務(wù) from django_celery_beat.models import CrontabSchedule, PeriodicTask # 創(chuàng)建間隔30分鐘執(zhí)行的任務(wù) crontab, _ = CrontabSchedule.objects.update_or_create( minute="*/30", hour="*", day_of_week="*", day_of_month='*', month_of_year='*', timezone=pytz.timezone("Asia/Shanghai"), ) # 任務(wù)存在則更新,不存在創(chuàng)建 PeriodicTask.objects.update_or_create( name=task_name, defaults={ "kwargs": json.dumps(kwargs, ensure_ascii=False), "task": "wechat.tasks.subscribe_task", "crontab": crontab, }, ) # 刪除任務(wù) task = PeriodicTask.objects.filter(name__startswith=sub_id) if task: task.update(enabled=False) task.delete() # 暫停當(dāng)前任務(wù) tasks = PeriodicTask.objects.filter(name__startswith=sub_id) if tasks: tasks.update(enabled=True if status else False)
運(yùn)行任務(wù)
# 啟動(dòng)任務(wù) work celery -A django_server worker -l INFO --logfile=/var/log/dec_server/worker.log # 啟動(dòng)定時(shí)器觸發(fā) beat celery -A django_server beat -l info --scheduler django_celery_beat.schedulers:DatabaseScheduler --logfile=/var/log/dec_server/beat.log
Tips:
參考鏈接:
https://github.com/celery/django-celery-beat
https://pypi.org/project/django-celery-beat/
到此這篇關(guān)于Django使用 django-celery-beat動(dòng)態(tài)添加定時(shí)任務(wù)的文章就介紹到這了,更多相關(guān)django celery beat動(dòng)態(tài)添加定時(shí)任務(wù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
pandas 將list切分后存入DataFrame中的實(shí)例
今天小編就為大家分享一篇pandas 將list切分后存入DataFrame中的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-07-07python實(shí)現(xiàn)獲取電腦所連接的wifi密碼
電腦連接wifi后,很難直觀地看到當(dāng)前連接wifi的密碼,需要借助命令行公管局才可以查看到相關(guān)信息,本文為大家介紹一下如何利用python獲取電腦所連接的wifi密碼,感興趣的可以了解下2023-11-11Pytorch中關(guān)于RNN輸入和輸出的形狀總結(jié)
這篇文章主要介紹了Pytorch中關(guān)于RNN輸入和輸出的形狀總結(jié),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-06-06python 通過(guò) socket 發(fā)送文件的實(shí)例代碼
這篇文章主要介紹了python 通過(guò) socket 發(fā)送文件的實(shí)例代碼,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2018-08-08聊聊通過(guò)celery_one避免Celery定時(shí)任務(wù)重復(fù)執(zhí)行的問(wèn)題
Celery Once 也是利用 Redis 加鎖來(lái)實(shí)現(xiàn), Celery Once 在 Task 類(lèi)基礎(chǔ)上實(shí)現(xiàn)了 QueueOnce 類(lèi),該類(lèi)提供了任務(wù)去重的功能,今天通過(guò)本文給大家介紹通過(guò)celery_one避免Celery定時(shí)任務(wù)重復(fù)執(zhí)行的問(wèn)題,感興趣的朋友一起看看吧2021-10-10python3 googletrans超時(shí)報(bào)錯(cuò)問(wèn)題及翻譯工具優(yōu)化方案 附源碼
這篇文章主要介紹了python3 googletrans超時(shí)報(bào)錯(cuò)問(wèn)題及翻譯工具優(yōu)化方案 附源碼,本文給大家分享解決方法,通過(guò)實(shí)例代碼相結(jié)合給大家介紹的非常詳細(xì),需要的朋友可以參考下2020-12-12