odoo 定时任务的使用方法
来源:互联网 发布:iphone se 知乎 编辑:程序博客网 时间:2024/05/21 19:34
编写执行程序
编写openerp模块代码,在模块代码中编写执行程序! 此处为了方便,只是做了简单的打印输入, 代码如下:
# -*- coding: utf-8 -*-from openerp.osv import osvclass task_test(osv.osv): _auto = False _name = "task.test" def run_scheduler(self, cr, uid, args,context=None): print "test scheduler"
配置任务运行参数
在模块中申明一个xxx_data.xml文件,xxx可以不为模块名称,然后在openerp.py 文件中的data属性中加入xxx_data.xml即可,xxx_data.xml文件的配置内容如下:
<?xml version="1.0" encoding="utf-8"?><openerp> <data noupdate="1"> <record forcecreate="True" id="ir_cron_scheduler_action" model="ir.cron"> <field name="name">Run mrp scheduler</field> <field eval="True" name="active"/> <field name="user_id" ref="base.user_root"/> <field name="interval_number">1</field> <field name="interval_type">minutes</field> <field name="numbercall">3</field> <field eval="False" name="doall"/> <field eval="'task.test'" name="model"/> <field eval="'run_scheduler'" name="function"/> <field eval="'(True,)'" name="args"/> </record> </data></openerp>
配置参数说明
从上面我们可以看到配置的这个xxx_data.xml文件在文件的第4行配置了model="ir.cron" 那么我们在oe中打开model ir_cron 可以看到该class的_columns有如下字段:
_columns = { 'name': fields.char('Name', required=True), 'user_id': fields.many2one('res.users', 'User', required=True), 'active': fields.boolean('Active'), 'interval_number': fields.integer('Interval Number',help="Repeat every x."), 'interval_type': fields.selection( [('minutes', 'Minutes'), ('hours', 'Hours'), ('work_days','Work Days'), ('days', 'Days'),('weeks', 'Weeks'), ('months', 'Months')], 'Interval Unit'), 'numbercall': fields.integer('Number of Calls', help='How many times the method is called,\na negative number indicates no limit.'), 'doall' : fields.boolean('Repeat Missed', help="Specify if missed occurrences should be executed when the server restarts."), 'nextcall' : fields.datetime('Next Execution Date', required=True, help="Next planned execution date for this job."), 'model': fields.char('Object', help="Model name on which the method to be called is located, e.g. 'res.partner'."), 'function': fields.char('Method', help="Name of the method to be called when this job is processed."), 'args': fields.text('Arguments', help="Arguments to be passed to the method, e.g. (uid,)."), 'priority': fields.integer('Priority', help='The priority of the job, as an integer: 0 means higher priority, 10 means lower priority.') }
- name 即该task的名称,由用户定义为该task主要的职责
- user_id 对应res_users表,需要一个用户ID
- active 是否激活该task,默认为True
- interval_number 间隔时间,类型为integer
- interval_type 执行task的周期类型,只能选择分钟、小时、天、周、月,可惜没有秒。
- numbercall 方法调用多少次,-1则是没有限制
- doall 如果任务执行时间错过了服务器重启时间是否重新执行任务
- nextcall 下次的调用时间,我们不用配置,oe会自动计算
- model 即模块名称
- function 要执行的方法
- args 传递的参数
- priority 任务优先级别 0是最高级别,10是最低级别
执行过程
在ir_cron模块中主要有三个主要的方法分别为:_callback、_process_job、_acquire_job ,在server.py文件中有如下的Python代码:
def cron_thread(self, number): while True: time.sleep(SLEEP_INTERVAL + number) # Steve Reich timing style registries = openerp.modules.registry.RegistryManager.registries _logger.debug('cron%d polling for jobs', number) for db_name, registry in registries.items(): while True and registry.ready: acquired = openerp.addons.base.ir.ir_cron.ir_cron._acquire_job(db_name) if not acquired: break
到此调用过程就清楚了,server先调用_acquire_job 方法,_acquire_job 会根据dbname获取任务执行的相关数据、例如获取数据操作cr对象,要执行的jobs等,例如:
db = openerp.sql_db.db_connect(db_name) threading.current_thread().dbname = db_name cr = db.cursor()
,这个代码又帮我们了解到了如何获取数据库的cr对象。_acquire_job获取相关数据之后,然后交给_process_job方法,该方法会去更新任务的下一次执行时间等数据,然后交由_callback 方法,有兴趣的可以去读一下ir_cron和server的源码。
阅读全文
0 0
- odoo 定时任务的使用方法
- odoo中定时任务task的实现方式
- spring定时任务的两种使用方法
- Linux定时任务Crontab的使用方法总结
- Quartz定时任务学习(1)--基本的使用方法
- oracle定时任务dbms_job与dbms_scheduler使用方法
- 定时任务的执行
- spring的定时任务
- oracle的定时任务
- mysql的定时任务
- 定时任务的执行
- spring的定时任务
- ExtJS的定时任务
- spring的定时任务
- Spring的定时任务
- android的定时任务
- 定时任务的实现
- PHP的定时任务
- Ehcache 中ehcache.xml 配置详解和示例
- WPF 设置TextBox为空时,背景为文字提示。
- python3下:Was unable to import superset Error: No module named 'MySQLdb'
- Linux-Centos7通过 ssh 远程登录其他用户
- linux下的定时或计时操作(gettimeofday等的用法,秒,微妙,纳秒
- odoo 定时任务的使用方法
- 视频目标检测--Flow-Guided Feature Aggregation for Video Object Detection
- 【云计算的1024种玩法】自己搭游戏服务器:我的世界Minecraft
- WPF实现窗体最小化后小图标在右边任务栏下
- C++之将与参数无关的代码抽离templates(44)---《Effective C++》
- react native 震动 Vibration 使用详解
- DSP28335官方例程Control Suit(1)——LED实验
- java基础复习--复习总结11
- C++位运算