最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

python Celery定時(shí)任務(wù)的示例

 更新時(shí)間:2018年03月13日 09:08:38   作者:sicofield  
這篇文章主要介紹了python Celery定時(shí)任務(wù)的示例,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧

本文介紹了python Celery定時(shí)任務(wù)的示例,分享給大家,具體如下:

配置

啟用Celery的定時(shí)任務(wù)需要設(shè)置CELERYBEAT_SCHEDULE 。


Celery的定時(shí)任務(wù)都由celery beat來進(jìn)行調(diào)度。celery beat默認(rèn)按照settings.py之中的時(shí)區(qū)時(shí)間來調(diào)度定時(shí)任務(wù)。

創(chuàng)建定時(shí)任務(wù)

一種創(chuàng)建定時(shí)任務(wù)的方式是配置CELERYBEAT_SCHEDULE:

#每30秒調(diào)用task.add
from datetime import timedelta

CELERYBEAT_SCHEDULE = {
  'add-every-30-seconds': {
    'task': 'tasks.add',
    'schedule': timedelta(seconds=30),
    'args': (16, 16)
  },
}
#crontab任務(wù)
#每周一7:30調(diào)用task.add
from celery.schedules import crontab

CELERYBEAT_SCHEDULE = {
  # Executes every Monday morning at 7:30 A.M
  'add-every-monday-morning': {
    'task': 'tasks.add',
    'schedule': crontab(hour=7, minute=30, day_of_week=1),
    'args': (16, 16),
  },
}

使用數(shù)據(jù)庫存儲定時(shí)任務(wù)

使用數(shù)據(jù)庫存儲定時(shí)任務(wù)需要設(shè)置CELERYBEAT_SCHEDULE如下:

import datetime
import json
from djcelery import models as celery_models
from django.utils import timezone
#創(chuàng)建任務(wù)
def create_task(name, task, task_args, crontab_time):
  '''
  name # 任務(wù)名字
  task # 執(zhí)行的任務(wù) "myapp.tasks.add"
  task_args # 任務(wù)參數(shù) {"x":1, "Y":1}

  crontab_time # 定時(shí)任務(wù)時(shí)間 格式:
  {
    'month_of_year': 9 # 月份
    'day_of_month': 5 # 日期
    'hour': 01 # 小時(shí)
    'minute':05 # 分鐘
  }
  '''

  # task任務(wù), created是否定時(shí)創(chuàng)建
  task, created = celery_models.PeriodicTask.objects.
              get_or_create(name=name,task=task)
  # 獲取 crontab
  crontab = celery_models.CrontabSchedule.objects.
              filter(**crontab_time).first()
  if crontab is None:
  # 如果沒有就創(chuàng)建,有的話就繼續(xù)復(fù)用之前的crontab
    crontab = celery_models.CrontabSchedule.objects.
              create(**crontab_time)
  task.crontab = crontab # 設(shè)置crontab
  task.enabled = True # 開啟task
  task.kwargs = json.dumps(task_args) # 傳入task參數(shù)
  expiration = timezone.now() + datetime.timedelta(day=1)
  task.expires = expiration # 設(shè)置任務(wù)過期時(shí)間為現(xiàn)在時(shí)間的一天以后
  task.save()
  return True 

#關(guān)閉任務(wù)
def disable_task(name):
'''
關(guān)閉任務(wù)
'''
  try:
    task = celery_models.PeriodicTask.objects.get(name=name)
    task.enabled = False # 設(shè)置關(guān)閉
    task.save()
    return True
  except celery_models.PeriodicTask.DoesNotExist:
    return True

啟動(dòng)beat

執(zhí)行定時(shí)任務(wù)時(shí), Celery會通過celery beat進(jìn)程來完成。Celery beat會保持運(yùn)行, 一旦到了某一定時(shí)任務(wù)需要執(zhí)行時(shí), Celery beat便將其加入到queue中. 不像worker進(jìn)程, Celery beat只需要一個(gè)即可。而且為了避免有重復(fù)的任務(wù)被發(fā)送出去,所以Celery beat僅能有一個(gè)。

啟動(dòng):

python manage.py celery beat --loglevel=info

其實(shí)還有一種簡單的啟動(dòng)方式worker和beat一起啟動(dòng):

python manage.py celery worker --loglevel=info --beat

定時(shí)刪除

由于很多任務(wù)都是一次執(zhí)行完就不需要,留在數(shù)據(jù)庫里就是垃圾數(shù)據(jù)了有沒有辦法清除。方法肯定有因?yàn)閐jango-celery本身就有定時(shí)任務(wù)功能我們加個(gè)任務(wù)就解決了。好我們看代碼:在django app目錄中打開taske.py加入如下代碼

from djcelery import models as celery_models
from django.utils import timezone
@task()
def delete():
  '''
  刪除任務(wù)
  從models中過濾出過期時(shí)間小于現(xiàn)在的時(shí)間然后刪除
  '''
  return celery_models.PeriodicTask.objects.filter(
              expires__lt=timezone.now()).delete()

創(chuàng)建任務(wù)腳本里設(shè)置了 expires 1天以后過期,這樣在filter的時(shí)候就能當(dāng)做條件把過期的任務(wù)找到并且刪除。

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Python辦公自動(dòng)化之文件的比較合并與xml操作

    Python辦公自動(dòng)化之文件的比較合并與xml操作

    這篇文章主要為大家詳細(xì)介紹了Python辦公自動(dòng)化之文件的比較合并與xml文件操作的相關(guān)知識,文中的示例代碼講解詳細(xì),需要的可以參考一下
    2023-12-12
  • pymongo為mongodb數(shù)據(jù)庫添加索引的方法

    pymongo為mongodb數(shù)據(jù)庫添加索引的方法

    這篇文章主要介紹了pymongo為mongodb數(shù)據(jù)庫添加索引的方法,涉及Python操作mongodb數(shù)據(jù)庫的相關(guān)技巧,非常簡單實(shí)用,需要的朋友可以參考下
    2015-05-05
  • Python 高級庫15 個(gè)讓新手愛不釋手(推薦)

    Python 高級庫15 個(gè)讓新手愛不釋手(推薦)

    對于初學(xué)者來說,這是一種簡單易學(xué)的編程語言;另一個(gè)原因:大量開箱即用的第三方庫,正是 23 萬個(gè)由用戶提供的軟件包使得 Python 真正強(qiáng)大和流行,本文給大家分享15 個(gè)讓新手愛不釋手Python 高級庫的相關(guān)知識,感興趣的朋友一起看看吧
    2021-05-05
  • 教你用Python寫一個(gè)京東自動(dòng)下單搶購腳本

    教你用Python寫一個(gè)京東自動(dòng)下單搶購腳本

    很多朋友都有網(wǎng)購搶購限量商品的經(jīng)歷,有時(shí)候蹲點(diǎn)搶怎么也搶不到,今天小編帶你們學(xué)習(xí)怎么用Python寫一個(gè)京東自動(dòng)下單搶購腳本,以后再也不用拼手速拼網(wǎng)速啦,快來一起看看吧
    2023-03-03
  • python實(shí)現(xiàn)文件快照加密保護(hù)的方法

    python實(shí)現(xiàn)文件快照加密保護(hù)的方法

    這篇文章主要介紹了python實(shí)現(xiàn)文件快照加密保護(hù)的方法,涉及Python文件加密的技巧,可有效防止文件被篡改,需要的朋友可以參考下
    2015-06-06
  • python中pd.cut()與pd.qcut()的對比及示例

    python中pd.cut()與pd.qcut()的對比及示例

    本文主要介紹了python中pd.cut()與pd.qcut()的對比及示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-06-06
  • 什么是python的列表推導(dǎo)式

    什么是python的列表推導(dǎo)式

    在本篇文章里小編給大家分享了關(guān)于python列表推導(dǎo)式的含義及用法,需要的朋友們可以參考下。
    2020-05-05
  • python輸出帶顏色字體實(shí)例方法

    python輸出帶顏色字體實(shí)例方法

    在本篇文章里小編給大家整理了關(guān)于python輸出帶顏色字體實(shí)例以及相關(guān)代碼,有需要的朋友們可以學(xué)習(xí)參考下。
    2019-09-09
  • 關(guān)于python3中setup.py小概念解析

    關(guān)于python3中setup.py小概念解析

    這篇文章主要介紹了關(guān)于python3中setup.py小概念解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-08-08
  • Python使用FFMPEG壓縮視頻的方法

    Python使用FFMPEG壓縮視頻的方法

    FFMPEG是一個(gè)完整的,跨平臺的解決方案,記錄,轉(zhuǎn)換和流音頻和視頻,,這篇文章主要介紹了FFMPEG視頻壓縮與Python使用方法,需要的朋友可以參考下
    2023-09-09

最新評論

宣城市| 金堂县| 中牟县| 萨嘎县| 武鸣县| 滦平县| 林口县| 阆中市| 林周县| 富民县| 太保市| 金溪县| 永昌县| 平泉县| 灵武市| 双流县| 长沙市| 天柱县| 大厂| 阳山县| 达拉特旗| 阜宁县| 张掖市| 西宁市| 石泉县| 光泽县| 岗巴县| 新巴尔虎右旗| 静乐县| 邻水| 襄城县| 常山县| 江孜县| 抚宁县| 寿宁县| 长沙县| 崇左市| 开鲁县| 洪洞县| 石台县| 莱西市|