適用場景幾點幾分執行特定的任務
定時任務
配置這個無需多說了和上篇文章一樣
任務函數
硬菜來了 添加任務時候的寫法
第一種:
from celery_task.order_task import order_add from celery_task.user_task import user_add from datetime import datetime # 拼接得到執行任務的時間,得到的就是一個時間對象 v1 = datetime(2019, 7, 21, 16, 53, 00) print('執行任務時間:', v1) # 轉化成utc時間 v2 = datetime.utcfromtimestamp(v1.timestamp()) print('執行任務的utc時間:', v2) # 執行定時任務,調用apply_async,args是要傳入的參數,eta是執行的時間 result = user_add.apply_async(args=[1, 3], eta=v2) print(result.id)
這里面需要把時間轉化成utc時區的時間,不然間隔十小時,自己推算即可
唯一變的就是傳遞參數的調用變成了apply_async(args=[參數,參數],eta=執行任務的時間)
worker日志
接收到任務到時間 16:52:17
任務執行完成的時間 16:53:02
任務耗時2秒
第二種
# 獲取當前時間 ctime = datetime.now() # 默認用utc時間,把當前時間轉utc時間 utc_ctime = datetime.utcfromtimestamp(ctime.timestamp()) from datetime import timedelta # 這段意思是取十秒之后的時間對象,因為時間對象只能和時間對象相加 time_delay = timedelta(seconds=10) # 最終的時間對象為當前時間后十秒 task_time = utc_ctime + time_delay print('最終時間', task_time) # 使用apply_async並設定時間 result = user_add.apply_async(args=[4, 3], eta=task_time) print(result.id)
打印信息
worker日志信息
執行計划任務
from datetime import timedelta from celery.schedules import crontab APP.conf.beat_schedule = { # 名字隨意命名 'add-every-10-seconds': { # 執行tasks1下的test_celery函數 'task': 'celery_task.tasks1.test_celery', # 每隔2秒執行一次 # 'schedule': 1.0, # 'schedule': crontab(minute="*/1"), 'schedule': timedelta(seconds=2), # 傳遞參數 'args': ('參數', '參數') }, 'add-every-12-seconds': { 'task': 'celery_task.tasks1.test_celery', # 每年4月11號,8點42分執行 'schedule': crontab(minute=42, hour=8, day_of_month=11, month_of_year=4), 'schedule': crontab(minute=42, hour=8, day_of_month=11, month_of_year=4), 'args': (16, 16) }, }
啟動一個beat自定提交任務:celery beat -A celery_tasks.tasks -l info