利用celery.schedulescrontab()设置周期性的定时任务
Celery 是一个分布式任务队列,常用于异步处理任务的框架。它提供了一种简单的方式来设置和调度周期性的定时任务。在 Celery 中,可以使用 celery.schedules.crontab() 方法来定义一个周期性的定时任务。celery.schedules.crontab() 方法接受类似于 cron 表达式的参数,用于指定定时任务的执行时间。
下面是一个使用 celery.schedules.crontab() 方法设置定时任务的例子:
from celery import Celery
from celery.schedules import crontab
app = Celery('tasks', broker='redis://localhost:6379/0')
@app.on_after_configure.connect
def setup_periodic_tasks(sender, **kwargs):
# 每分钟执行一次定时任务
sender.add_periodic_task(crontab(minute='*'), some_task.s(), name='task every minute')
@app.task
def some_task():
# 定时任务执行的逻辑
print("This is a periodic task")
在上面的例子中,我们首先实例化了一个 Celery 对象,指定了消息代理(broker)的位置为 localhost 上的 Redis,这里使用了默认的数据库 0。
然后,我们定义了一个装饰器 @app.on_after_configure.connect。这个装饰器将会在 Celery 的配置准备好之后被调用。在这个装饰器中,我们使用 sender.add_periodic_task() 方法来定义一个周期性的定时任务。这个方法接受一个 celery.schedules.crontab() 对象作为参数,用于指定任务的执行时间。在这个例子中,我们指定了任务每分钟执行一次。
最后,我们定义了一个 some_task() 函数作为定时任务的执行逻辑。在这个例子中,我们简单地打印一行文本来表示任务的执行。
在整个例子中,我们通过调用 sender.add_periodic_task() 方法将 some_task() 函数注册为一个周期性的定时任务。这个调用将在 Celery 的配置准备好之后被执行。
当我们启动 Celery 的 worker 后,这个定时任务将会周期性地执行。每分钟,定时任务的执行逻辑将会被触发一次,打印一行文本。
通过上面的例子,我们可以看到如何使用 celery.schedules.crontab() 方法来设置周期性的定时任务。我们只需要指定一个类似于 cron 表达式的参数,就可以定制任务的执行时间。通过这种方式,我们可以在 Celery 中方便地实现定时任务的调度。
