odoo 创建定时任务

需求描述:需要在某一特定的时间执行某一段python代码,可具有一定的周期性

odoo中查看所定义的定时任务:

 创建定时任务:

   方式一:

 界面创建:依次点击  安排的动作-->创建

方式二:

通过代码创建定时任务

一般是创建在模块中的data文件夹,下面以我创建的一个定时任务为例子:

<odoo>
    <data noupdate="1">
       <record id="ir_cron_sync_plm_material" model="ir.cron">
            <field name="name">金蝶云星空: 同步客户供应商</field>
            <field name="model_id" ref="maono_kingdee_cloud.model_res_partner"/>
            <field name="state">code</field>
            <field name="code">
                model.sync_kingdee_res_partner_cron()
            </field>
            <field name="user_id" ref="base.user_root"/>
            <field name="interval_number">1</field>
            <field name="interval_type">days</field>
            <field name="numbercall">-1</field>
           <field name="nextcall"
                  eval="(DateTime.now().replace(hour=0, minute=0, second=0) + timedelta(days=1)).
                  strftime('%Y-%m-%d %H:%M:%S')" />
        </record>
    </data>
</odoo>

  参数介绍:

    ir.corn  :定时任务所存放的模型,如果需要用sql批量操作,模型就是ir_cron  

    name : 定时任务名字

    model_id :  通过ref属性配置定时任务所绑定的模型,形式是“包名.model_模型名”下面的 code属性的python方法就是从所绑定的模型中调用

    code : 执行该定时任务所调用的python代码

    user_id :调度程序的用户

    interval_number:调用间隔,即每隔多久调用一次

    interval_type:调用单位,年、月、日

    numbercall:调用次数,-1表示不限制次数

    nextcall: 下一次调用时间

     doall :如果任务的执行时间刚好因服务器重启错过,是否立刻执行

queue_job 模块异步执行:

         模块地址:https://github.com/OCA/queue/tree/10.0/queue_job

使用其实非常简单,使用之前在配置文件添加如下设置:

[options]
# 要使用的处理器数量
workers = 4
server_wide_modules = base,web,queue_job

[queue_job]
channels = root:2

安装模块:

xml配置定时任务:

<odoo>
    <record id="ir_cron_stock_alert" model="ir.cron">
        <field name="name">库存预警</field>
        <field name="model_id" ref="maono_stock_alert.model_stock_alert"/>
        <field name="state">code</field>
        <field name="code">
            model.with_delay().action_send_email()
        </field>
        <field name="user_id" ref="base.user_root"/>
        <field name="interval_number">7</field>
        <field name="interval_type">days</field>
        <field name="numbercall">-1</field>
        <field name="nextcall"
               eval="(DateTime.now().replace(hour=0, minute=0, second=0) + timedelta(days=2)).
                  strftime('%Y-%m-%d %H:%M:%S')"/>
    </record>

           <record id="maono_default_stock_alert_email" model="ir.config_parameter">
            <field name="key">stock_alert_email_to</field>
            <field name="value" eval=""> </field>
        </record>
</odoo>

注意:with_delay()方法使得该任务异步执行,然后进入作业队列菜单就可以看到所执行的定时任务。

还有就是服务器重启之前执行sql,修改任务状态,放置堵塞:

update queue_job set state='pending' where state in ('started', 'enqueued')

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值