Celery调度(schedule):利用schedule()方法实现定时任务
Celery是一个常用的分布式任务调度框架,可以轻松地实现定时任务。在Celery中,我们可以使用schedule()方法来设置定时任务。
schedule()方法是在celery.schedules模块中定义的,它可以接受多种时间规则来指定任务的执行时间。以下是一些常用的时间规则:
- crontab规则:可以使用类似于Linux中crontab的语法来指定任务执行时间。例如,每天早上9点执行任务可以使用crontab(minute=0, hour=9)来指定。
- timedelta规则:可以使用timedelta对象来指定任务执行的时间间隔。例如,每隔5分钟执行一次任务可以使用timedelta(minutes=5)来指定。
- solar规则:可以使用solar对象来指定任务执行的时间,例如日出、日落等。例如,通过solar("sunrise", -30)可以指定任务在日出前30分钟执行。
下面是一个使用Celery的例子,演示了如何使用schedule()方法来实现定时任务:
from celery import Celery
from celery.schedules import crontab
# 创建Celery实例
app = Celery('scheduler_example', broker='redis://localhost:6379/0')
# 定义任务
@app.task
def say_hello():
print("Hello, Celery!")
# 配置任务的定时执行时间
app.conf.beat_schedule = {
'say_hello_task': {
'task': 'scheduler_example.say_hello',
'schedule': crontab(minute=0, hour=9), # 每天早上9点执行任务
},
}
# 启动Celery的定时任务调度器
app.conf.timezone = 'Asia/Shanghai' # 设置时区
app.conf.enable_utc = False # 禁用UTC时间
if __name__ == '__main__':
app.start()
在上述代码中,我们首先创建了一个Celery实例,并指定了连接到Redis作为消息代理的配置。然后,我们定义了一个简单的任务函数say_hello(),该函数会在定时任务中被执行。
接下来,我们使用app.conf.beat_schedule配置来指定任务的定时执行时间。在这个例子中,我们使用crontab规则来指定任务在每天早上9点执行。
最后,我们设置了时区和禁用了UTC时间,并通过调用app.start()来启动Celery的定时任务调度器。
注意:在运行这个例子之前,你需要先安装Celery和Redis,并确保Redis服务正在运行。
总结起来,Celery的schedule()方法可以轻松地实现定时任务调度。配合Celery强大的分布式任务执行能力,我们可以方便地实现各种复杂的定时任务。
