odoo与异步任务神器celery集成

本文介绍了如何将Odoo与Celery结合,以实现更稳定的定时任务和解耦需求。首先,需要安装redis和celery,并配置相关模块。接着,详细阐述了启动Celery worker的步骤,以及如何在Odoo中使用CeleryTask装饰器进行普通方法调用和定时任务设置。最后,提供了环境变量配置和启动脚本示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

源码地址:https://github.com/sunliang1163/celery-odoo

背景:公司ODOO运行一年多,随着业务不断迭代,定时任务运行不很稳定,再加上解耦的需要,偶然看到神器celery,便想到odoo与celery结合, 在github看到celery-odoo这个工程,为了自己的业务需要,进行了改造。


一 、 准备工作 
1、安装redis,如 redis://192.168.1.58:6379/ 


2、pip install 'celery[redis]' 


3、安装celery_queue模块,我的物理路径是/data/rcerp/odoo8/openerp/hxy_addons/celery_queue 


4、启动celery work


1)配置PYTHONPATH环境变量,指定odoo的根目录,也就是openerp的上一级目录;以及
celery_queue目录的上一级目录
export PYTHONPATH="/data/rcerp/odoo8:/data/rcerp/odoo8/openerp/hxy_addons"
### Odoo 17 中集成 Celery 实现异步任务处理 为了在 Odoo 17 中实现异步任务处理,可以借助 Celery 这一强大的分布式任务队列工具。以下是具体的方法: #### 安装依赖库 首先,在服务器环境中安装必要的 Python 库来支持 Celery 和消息代理(如 RabbitMQ 或 Redis)。可以通过 pip 来完成这些包的安装。 ```bash pip install celery redis ``` #### 配置 Celery Broker URL 编辑 `odoo.conf` 文件以配置 Celery 的 broker URL 参数,这指定了用于传递任务的消息中间件服务的位置。例如使用Redis作为broker: ```ini celery_broker_url=redis://localhost:6379/0 ``` 此设置告知 Celery 使用本地运行的 Redis 数据库实例中的第零号数据库[^1]。 #### 创建自定义模块并添加 Celery Task Decorator 开发一个新的 Odoo 模块或者修改现有模块以便引入 Celery 功能。在这个过程中,利用Python装饰器机制将某些函数标记为由 Celery 执行的任务。下面是一个简单的例子展示如何声明一个名为 `my_task_function` 的异步任务: ```python from odoo import models, fields, api from celery import shared_task class MyModel(models.Model): _name = 'mymodule.model' @shared_task(bind=True) def my_task_function(self, arg1, arg2): """执行一些耗时较长的工作""" result = ... # 处理逻辑 return result ``` 这里应用了来自 Celery 的 `@shared_task` 装饰器给方法 `my_task_function()` ,使其成为一个可以在后台排队等待被执行的任务[^3]。 #### 修改业务流程调用方式 当希望触发上述定义好的异步任务时,只需简单地调用该方法即可而无需关心其实际执行时间点。比如在一个按钮点击事件处理器里这样写: ```python @api.multi def button_click_handler(self): self.my_task_function.delay('argument value') ``` 注意这里的 `.delay()` 方法用来立即返回控制权而不阻塞主线程的同时安排任务入队待后续真正被 worker 取出来执行[^2]。 #### 启动 Celery Worker 最后一步是在命令行终端启动至少一个 Celery 工作者进程去监听新到来的任务请求并且负责最终的实际工作负载分派结果反馈。通常做法如下所示: ```bash celery -A your_odoo_project_name.celery_app worker --loglevel=info ``` 其中 `-A` 参数后面跟的是包含了项目内所有共享任务注册表的应用对象路径;`your_odoo_project_name.celery_app` 是假设值,请替换为你自己的实际情况下的相应名称[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值