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
confluence与jira部署详解
confluence与jira部署详解
confluence与jira部署详解
|
JSON 中间件 C#
氚云的第三方接口调用| 学习笔记
快速学习氚云的第三方接口调用。
|
消息中间件 存储 NoSQL
一文读懂python分布式任务队列-celery
# 一文读懂Python分布式任务队列-Celery Celery是一个分布式任务执行框架,支持大量并发任务。它采用生产者-消费者模型,由Broker、Worker和Backend组成。生产者提交任务到队列,Worker异步执行,结果存储在Backend。适用于异步任务、大规模实时任务和定时任务。5月更文挑战第17天
2269 1
|
SQL 存储 关系型数据库
int(1) 和 int(10) 有什么区别?
在MySQL中,`int`类型后面的数字(如`int(1)`、`int(10)`)并不影响其存储范围,最大值仍为4294967295(无符号)。这些数字只有在配合`zerofill`使用时才有意义,用于显示时不足位数补0。例如,`int(4) zerofill`会将1显示为0001。这适用于需要固定长度编号的场景,如学号等。
450 3
int(1) 和 int(10) 有什么区别?
|
机器学习/深度学习
RNN 和 Transformer 复杂度比较
RNN 和 Transformer 复杂度比较
522 0
|
测试技术 Python
Python--getattr反射+selenium详解篇
Python--getattr反射+selenium详解篇
425 0
|
分布式计算 Java Hadoop
NameNode 处理线程配置(心跳并发)
NameNode线程池处理客户端和数据节点请求,如读写文件及心跳、块报告。通过调整`dfs.namenode.handler.count`(默认10,示例设为21)在`hdfs-site.xml`中可控制并发处理能力。线程数过多或过少都可能影响性能,需平衡资源使用并进行基准测试以确定最佳值。合理线程数可通过公式`int(math.log(N) * 20)`计算,N为服务器数量。例如,3台服务器的计算结果为21。
651 4
|
存储 SQL 网络协议
ClickHouse(05)ClickHouse数据类型详解
ClickHouse是一款分析型数据库,支持基础、复合和特殊数据类型。基础类型包括数值(Int、Float、Decimal)、字符串(String、FixedString、UUID)和时间(DateTime、DateTime64、Date)类型。数值类型如Int8-64和Float32-64,Decimal提供高精度计算。字符串中的FixedString有固定长度,UUID作为主键。时间类型最高精度到秒。复合类型有数组、元组、枚举和嵌套,其中数组和元组允许不同数据类型,枚举节省空间,嵌套类型是多维数组结构。特殊类型如Nullable表示可为空,Domain封装IPv4和IPv6。
1473 1
ClickHouse(05)ClickHouse数据类型详解
|
存储 SQL 数据库
MySQL设计规约问题之为何推荐用DECIMAL代替FLOAT和DOUBLE来存储精确浮点数
MySQL设计规约问题之为何推荐用DECIMAL代替FLOAT和DOUBLE来存储精确浮点数