国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

python Celery定時任務的示例

2020-02-22 23:27:31
字體:
來源:轉載
供稿:網友

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

配置

啟用Celery的定時任務需要設置CELERYBEAT_SCHEDULE 。


Celery的定時任務都由celery beat來進行調度。celery beat默認按照settings.py之中的時區時間來調度定時任務。

創建定時任務

一種創建定時任務的方式是配置CELERYBEAT_SCHEDULE:

#每30秒調用task.addfrom datetime import timedeltaCELERYBEAT_SCHEDULE = {  'add-every-30-seconds': {    'task': 'tasks.add',    'schedule': timedelta(seconds=30),    'args': (16, 16)  },}
#crontab任務#每周一7:30調用task.addfrom celery.schedules import crontabCELERYBEAT_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),  },}

使用數據庫存儲定時任務

使用數據庫存儲定時任務需要設置CELERYBEAT_SCHEDULE如下:

import datetimeimport jsonfrom djcelery import models as celery_modelsfrom django.utils import timezone#創建任務def create_task(name, task, task_args, crontab_time):  '''  name # 任務名字  task # 執行的任務 "myapp.tasks.add"  task_args # 任務參數 {"x":1, "Y":1}  crontab_time # 定時任務時間 格式:  {    'month_of_year': 9 # 月份    'day_of_month': 5 # 日期    'hour': 01 # 小時    'minute':05 # 分鐘  }  '''  # task任務, created是否定時創建  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:  # 如果沒有就創建,有的話就繼續復用之前的crontab    crontab = celery_models.CrontabSchedule.objects.              create(**crontab_time)  task.crontab = crontab # 設置crontab  task.enabled = True # 開啟task  task.kwargs = json.dumps(task_args) # 傳入task參數  expiration = timezone.now() + datetime.timedelta(day=1)  task.expires = expiration # 設置任務過期時間為現在時間的一天以后  task.save()  return True #關閉任務def disable_task(name):'''關閉任務'''  try:    task = celery_models.PeriodicTask.objects.get(name=name)    task.enabled = False # 設置關閉    task.save()    return True  except celery_models.PeriodicTask.DoesNotExist:    return True

啟動beat

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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 靖边县| 伊金霍洛旗| 南澳县| 容城县| 龙州县| 龙江县| 鹤峰县| 大姚县| 高雄市| 安陆市| 富宁县| 白玉县| 深水埗区| 新绛县| 涟源市| 林州市| 阿克苏市| 崇文区| 喀喇| 章丘市| 嫩江县| 津南区| 隆回县| 维西| 仙游县| 屯留县| 龙川县| 滕州市| 平利县| 乌兰察布市| 辽阳市| 云梦县| 平塘县| 扎赉特旗| 青川县| 泸西县| 富顺县| 伊通| 宣汉县| 资溪县| 中山市|