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

Celery.schedules.schedule()方法详细介绍和使用示例

发布时间:2023-12-28 02:42:13

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 的调度配置中,从而实现任务的定时执行。