Celery定時任務|計划任務


適用場景幾點幾分執行特定的任務

定時任務

配置這個無需多說了和上篇文章一樣

任務函數

硬菜來了 添加任務時候的寫法

第一種:

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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM