欢迎访问宙启技术站
智能推送

Celery调度(schedule):利用schedule()方法实现定时任务

发布时间:2023-12-28 02:39:38

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强大的分布式任务执行能力,我们可以方便地实现各种复杂的定时任务。