Odoo中文社区可以通过以下两个域名访问:shine-it.net , odoo.net.cn

由于系统升迁的原因,本论坛部分较早期的内容存在格式和链接损坏失效的问题,并非本论坛系统本身的缺陷,望谅解

本社区没有维护任何QQ群讨论组,任何与本社区同名的QQ群讨论组的言论与本社区无关!

开发人员可以登录gitter讨论组: http://gitter.im/odoo-china/Talk, 需要github账号

如果您登录系统碰到问题,请在微信公众号留言:

Odoo的异步队列神器-queue_job


  • 管理员

    当我们导入/导出一个很大的文件时,打印一个年度的财务明细报表时,或者执行一个需要长时间计算的任务时,我们的Odoo界面就被锁死的状态,一会儿让我们喝咖啡,一会儿请我们吃大餐,而且最后很可能超时跑飞,不了了之。
    这时,queue_job这个工具就派用场了。它可以将需要执行的代码作为延时任务放到队列里,从而不会阻断当前的操作。同时可以设定多个channel 和runner,在队列里的任务就可以被多个runner并发执行,大大提高了运行效率。
    而使用queue_job的语法非常简单,比如我们的模型my.model里有一个heavy_method需要异步执行,我们只要用job装饰器装饰这个方法:

    from odoo import models, fields, api
    from odoo.addons.queue_job.job import job
    
    class MyModel(models.Model):
       _name = 'my.model'
    
       @job
       def heavy_method(self, a, k=None):
           _logger.info('executed with a: %s and k: %s', a, k)
    

    然后在调用这个方法时先执行with_delay方法,比如:

        ...
        def action_heavy_button(self):
            self.with_delay().heavy_method('a', 2)