Celery

简介: 【10月更文挑战第10天】

Celery 是一个强大的异步任务队列/作业队列,基于分布式消息传递。它专注于实时操作,但也支持任务调度。以下是如何使用 Celery 的基本步骤和代码示例:

安装 Celery

首先,使用 pip 安装 Celery:

pip install celery

创建 Celery 实例

创建一个 Celery 实例,并指定消息代理(broker)和结果后端(backend)。

from celery import Celery

app = Celery(
    'my_app',
    broker='redis://localhost:6379/0',  # 消息代理
    backend='redis://localhost:6379/0',  # 结果后端
)

定义任务

使用 @app.task 装饰器定义一个任务。

@app.task
def add(x, y):
    return x + y

启动 Worker

在命令行中启动 Celery worker 来执行任务。

celery -A my_app worker --loglevel=info

调用任务

使用 delay 方法异步发送任务到 Celery。

result = add.delay(4, 4)

获取任务结果

使用返回的 AsyncResult 对象获取任务结果。

from celery.result import AsyncResult

task_id = result.id
async_result = AsyncResult(task_id, app=app)
print(async_result.get())  # 获取任务结果

定时任务

Celery 还支持定时任务,可以使用定时器(beat)来调度周期性任务。

from celery.schedules import crontab

app.conf.beat_schedule = {
   
    'run-every-5-minutes': {
   
        'task': 'my_app.add',
        'schedule': 300.0,  # 5分钟执行一次
    },
}

代码示例

以下是一个完整的 Celery 任务示例:

```python
from celery import Celery
from celery.schedules import crontab

创建 Celery 实例

app = Celery('my_app', broker='redis://localhost:6379/0', backend='redis://localhost:6379/0')

定义任务

@app.task
def add(x, y):
return x + y

定义周期性任务

app.conf.beat_schedule = {
'add-every-30-seconds': {
'task': 'my_app.add',
'schedule': 30.0, # 30秒执行一次
'args': (16, 16),
},
}

目录
相关文章
|
数据库 Linux Windows
关于使用CELERY的一点心得
使用也有大半年了。稳定性没话说啊。 但有一个坑,是我以前没注意的,记录下来。 就是本来一个任务是可以异步并行执行的。、但如何需要CELERY的执行结果来作判断的话,就会变得异步串行的。 这要值得注意。
1148 0
|
5月前
|
消息中间件 存储 BI
|
NoSQL API 调度
Celery初探
Celery初探
252 0
|
8月前
|
消息中间件 NoSQL Redis
【译】Celery文档1:First Steps with Celery——安装和配置Celery
【译】Celery文档1:First Steps with Celery——安装和配置Celery
126 14
|
消息中间件 开发框架 NoSQL
celery--介绍
celery--介绍
|
NoSQL Redis 调度
celery入门
将要执行异步任务脚本 tasks.py: from celery import Celery from celery import group # host='10.32.21.52', port=6379, db=3 app = Celery('tasks', backend = 'redis://10.
1003 0
|
8月前
|
数据库 Python
【译】Celery文档3:在Django中使用Celery
【译】Celery文档3:在Django中使用Celery
111 0
|
Python
如何在获取celery中的任务执行情况
开始以为在flower中获取,原来flower也是从celery中获取的。 如果直接用celery命令,一直会提示拒绝连接。 网上说了,用django命令就可以的。 于是试了下,OK了。 这样,至少可用于邮件报警吧。
2470 0

热门文章

最新文章