Celery.schedules.schedule()方法详细介绍和使用示例
Celery 是一个 Python 的分布式任务队列框架,它允许开发者通过将任务发送到消息队列来异步执行任务。Celery 提供了 Schedule 调度器,可以根据预定的时间来定时执行任务。
Celery.schedule.schedule() 方法是 Celery 中用于创建调度器对象的方法。它的用法如下:
schedule(run_every=None, run_at=None, timezone=None)
该方法接受三个可选参数,包括:
1. run_every: 表示任务的间隔时间,以秒为单位。如果设置了该参数,则会按照设置的间隔时间定期执行任务。
2. run_at: 表示任务的执行时间,以 datetime 对象表示。如果设置了该参数,则任务将在设置的时间点执行。
3. timezone: 表示时区的字符串,用于指定任务执行的时间所属的时区。如果不设置时区,则默认使用 UTC 时间。
下面是一个使用示例:
from celery.schedules import schedule # 创建一个每隔 5 秒执行一次的调度器 scheduler = schedule(run_every=5) # 创建一个在每天 9 点执行的调度器 from datetime import datetime scheduler = schedule(run_at=datetime(2022, 1, 1, 9)) # 创建一个在每天 9 点执行的调度器,并指定时区为 Asia/Shanghai scheduler = schedule(run_at=datetime(2022, 1, 1, 9), timezone='Asia/Shanghai')
在上述示例中,我们通过 schedule() 方法分别创建了三个调度器对象。 个调度器会每隔 5 秒执行一次任务,第二个调度器会在 2022 年 1 月 1 日的 9 点执行一次任务,第三个调度器还会在 2022 年 1 月 1 日的 9 点执行一次任务,但是会将执行的时间转换为 Asia/Shanghai 时区。
接下来,我们可以将这些调度器对象传递给 Celery 中的任务,从而定时执行任务。例如:
from celery import Celery
app = Celery('myapp', broker='pyamqp://guest@localhost//')
@app.task
def my_task():
print('Executing task')
# 将 个调度器与任务绑定
app.conf.beat_schedule = {
'my_task_schedule': {
'task': 'path.to.my_task',
'schedule': scheduler,
},
}
在上述示例中,我们将任务 my_task 和 个调度器 scheduler 绑定起来,然后将其添加到 app.conf.beat_schedule 中。Celery 在启动时会读取这个字典,并根据调度器的设置来定时执行任务。
总结来说,Celery 的 Celery.schedules.schedule() 方法用于创建调度器对象,通过指定任务的间隔时间、执行时间和时区等参数来实现定时任务的调度。开发者可以将调度器对象与任务绑定,并添加到 Celery 的调度配置中,从而实现任务的定时执行。
