odoo与异步任务神器celery集成

原创 2017年01月03日 16:41:51
源码地址: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"
2)进入celery_queue目录的上一级目录中,启动work
cd /data/rcerp/odoo8/openerp/hxy_addons
nohup celery -B -A celery_queue  worker -c 1 -Q openerp >>/data/rcerp/celery_console.log &

二、如何使用 

1、普通方法调用

from openerp.hxy_addons.celery_queue.decorators import CeleryTask 

@CeleryTask() 
def do_run_compute_stock_amount_qty_task(self, cr, uid, ids, context=None):
    print '1234567890' 
    return True


    
1)导入CeleryTask 


2)添加装饰器@CeleryTask()




2、定时任务调用


1)配置
CELERY_IMPORTS = (  # 指定导入的任务模块
                        'celery_queue.schedule_task.task_1',
                        'celery_queue.schedule_task.task_2'
                        )
    #schedules
    CELERYBEAT_SCHEDULE = {
        'add-every-30-seconds': {
             'task': 'celery_queue.schedule_task.task_1.execute',
             'schedule': timedelta(seconds=30),       # 每 30 秒执行一次
             'args': ()                           # 任务函数参数
        },
        'multiply-at-some-time': {
            'task': 'celery_queue.schedule_task.task_2.multiply',
            'schedule': crontab(hour=11, minute=25),   # 每天早上 11 点 25 分执行一次
            'args': (3, 7)                            # 任务函数参数
        }
    }



2)写具体方法,如task_1.py文件。注意该文件中装饰器名称为@celery.task,以防与@CeleryTask()混淆。
定时任务执行只支持单个DB,多个DB执行的方法还未想到解决办法。

附脚本:
1、配置环境变量


[rcerp@iZ258dzcy2jZ ~]$ more .bash_profile 
PYTHONPATH="/data/rcerp/odoo8"
export PYTHONPATH



2、启动celery work
 more start_celery.sh 
#!/bin/bash
cd /data/rcerp/odoo8/openerp/hxy_addons
nohup celery -B -A celery_queue  worker -c 1 -Q openerp >>/data/rcerp/celery_console.log &




水平有限,有讲不清楚或者不完善的地方欢迎批评


参考文档:http://python.jobbole.com/87086/
版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

获取Odoo中由Bazaar管理的例子源代码

1 安装  python 2.6/2.7 2 安装bazaar代码管理工具客户端    http://wiki.bazaar.canonical.com/Download。 安装时会自动检查本机已...

Odoo 调用redis

1 下载Redis的python依赖包   在Python官方网站的依赖包索引表中找到名为redis 2.10.2的依赖包

odoo SSO:单点登录

通过地利现有统一管理平台manage.dili7.com访问OpenERP,从而实现单点登录有2种方式   一  使用OAuth模式,需要安装OAuth模块   1 安装模块

QWeb是odoo模板引擎

概述 QWeb是odoo主要模板引擎,采用xml表述,最后生成HTML文件 一般用法条件表达式 0"> Estimate 比较符号: lt(<) lte() gt...

异步任务神器 Celery 简明笔记

转自:https://funhacks.net/2016/12/13/celery/ Celery 在程序的运行过程中,我们经常会碰到一些耗时耗资源的操作,为了避免它们阻塞主程序的运行,我们经常会...

异步任务神器 Celery 快速入门

简介在程序运行过程中,要执行一个很久的任务,但是我们又不想主程序被阻塞,常见的方法是多线程。可是当并发量过大时,多线程也会扛不住,必须要用线程池来限制并发个数,而且多线程对共享资源的使用也是很麻烦的事...

异步任务管理神器-zone.js

angular2使用了zone.js,这篇文章将介绍一下zone.js是干什么的,以及zone.js在angular2中是怎么应用的。

jango中如何使用django-celery完成异步任务 (1)

本篇博文主要介绍在开发环境中的celery使用,请勿用于部署服务器. 许多Django应用需要执行异步任务, 以便不耽误http request的执行. 我们也可以选择许多方法来完成异步任务, ...

Django中如何使用django-celery完成异步任务 (2)

在上一篇博文中, 我们介绍了如何在开发环境中使用Celery. 接下来我们介绍一下如何在部署环境使用Celery. 1. 简单设置 一个简单的Celery堆有一个queue和一个worke...

【转】分布式异步任务队列 Celery + rabbitmq (or redis )

最近的项目要使用异步的任务队列,初步选用了Celery,比较轻量级,但是对Task,Broker,Worker等概念有些理解的不透彻,找到以下文章,甚是透彻。 当我们需要处理一些比较耗时的任务时,我...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)