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),
},
}

目录
相关文章
|
JSON 中间件 C#
氚云的第三方接口调用| 学习笔记
快速学习氚云的第三方接口调用。
|
负载均衡 数据库连接 Linux
confluence与jira部署详解
confluence与jira部署详解
confluence与jira部署详解
|
安全 C++
【C++11保姆级教程】移动构造函数(move constructor)和移动赋值操作符(move assignment operator)
【C++11保姆级教程】移动构造函数(move constructor)和移动赋值操作符(move assignment operator)
2095 0
|
SQL 存储 关系型数据库
int(1) 和 int(10) 有什么区别?
在MySQL中,`int`类型后面的数字(如`int(1)`、`int(10)`)并不影响其存储范围,最大值仍为4294967295(无符号)。这些数字只有在配合`zerofill`使用时才有意义,用于显示时不足位数补0。例如,`int(4) zerofill`会将1显示为0001。这适用于需要固定长度编号的场景,如学号等。
557 3
int(1) 和 int(10) 有什么区别?
|
缓存 Ubuntu Linux
Linux中yum、rpm、apt-get、wget的区别,yum、rpm、apt-get常用命令,CentOS、Ubuntu中安装wget
通过本文,我们详细了解了 `yum`、`rpm`、`apt-get`和 `wget`的区别、常用命令以及在CentOS和Ubuntu中安装 `wget`的方法。`yum`和 `apt-get`是高层次的包管理器,分别用于RPM系和Debian系发行版,能够自动解决依赖问题;而 `rpm`是低层次的包管理工具,适合处理单个包;`wget`则是一个功能强大的下载工具,适用于各种下载任务。在实际使用中,根据系统类型和任务需求选择合适的工具,可以大大提高工作效率和系统管理的便利性。
1826 25
|
测试技术 Python
Python--getattr反射+selenium详解篇
Python--getattr反射+selenium详解篇
500 0
|
机器学习/深度学习
RNN 和 Transformer 复杂度比较
RNN 和 Transformer 复杂度比较
621 0
|
安全 数据库 C++
Python Web框架比较:Django vs Flask vs Pyramid
【10月更文挑战第6天】本文比较了Python中三个最受欢迎的Web框架:Django、Flask和Pyramid。Django功能全面,适合快速开发;Flask灵活轻量,易于上手;Pyramid介于两者之间,兼顾灵活性和可扩展性。文章分析了各框架的优缺点,帮助开发者根据项目需求和个人偏好做出合适的选择。
521 4