本文介紹了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僅能有一個。
新聞熱點
疑難解答