工作队列
项目描述
此插件为Odoo添加了一个集成的工作队列。
它允许异步执行的方法调用延迟执行。
工作由后台的Jobrunner执行,在其自己的事务中。
示例
from odoo import models, fields, api
from odoo.addons.queue_job.job import job
class MyModel(models.Model):
_name = 'my.model'
@api.multi
@job
def my_method(self, a, k=None):
_logger.info('executed with a: %s and k: %s', a, k)
class MyOtherModel(models.Model):
_name = 'my.other.model'
@api.multi
def button_do_stuff(self):
self.env['my.model'].with_delay().my_method('a', k=2)
在上面的代码片段中,当我们调用button_do_stuff时,将延迟一个捕获方法和参数的工作。它将在Jobrunner有空闲桶时执行,如果没有其他工作正在运行,这可以是瞬时的。
功能
工作视图,工作存储在PostgreSQL中
Jobrunner:执行工作,由于PostgreSQL的NOTIFY功能而非常高效
通道:为根通道及其子通道提供容量,并在其中隔离工作。例如,可以限制重工作一次执行,而轻工作四次执行。
重试:通过引发异常类型来重试工作的能力
重试模式:前三次尝试,10秒后重试,接下来的五次尝试,1分钟后重试,……
工作属性:优先级,预计到达时间(ETA),自定义描述,重试次数
相关操作:在工作视图中链接操作,例如打开由工作记录相关的记录
目录
安装
请确保拥有requests库。
配置
使用环境变量和命令行
调整环境变量(可选)
ODOO_QUEUE_JOB_CHANNELS=root:4 或其他通道配置。默认为 root:1
如果未设置 xmlrpc_port: ODOO_QUEUE_JOB_PORT=8069
使用 --load=web,queue_job 和 --workers 大于 1 的参数启动 Odoo。 [1]
使用 Odoo 配置文件
[options]
(...)
workers = 6
server_wide_modules = web,queue_job
(...)
[queue_job]
channels = root:2
通过检查 odoo 日志文件来确认运行器是否正确启动
...INFO...queue_job.jobrunner.runner: starting
...INFO...queue_job.jobrunner.runner: initializing database connections
...INFO...queue_job.jobrunner.runner: queue job runner ready for db <dbname>
...INFO...queue_job.jobrunner.runner: database connections ready
创建任务(例如使用 base_import_async)并观察它们立即并行启动。
提示:要启用队列任务的调试日志,使用 --log-handler=odoo.addons.queue_job:DEBUG
使用
要使用此模块,您需要
转到 作业队列 菜单
开发者
绕过运行中的 Odoo 的作业
在开发过程中(例如:连接器模块)您可能希望绕过队列作业并立即运行代码。
要这样做,您可以在环境中设置 TEST_QUEUE_JOB_NO_DELAY=1。
在测试中绕过作业
编写与作业相关的方法的测试时,处理延迟的记录集总是很棘手。为了使您的测试更轻松,您可以在上下文中设置 test_queue_job_no_delay=True。
提示:您可以在测试用例级别这样做
@classmethod
def setUpClass(cls):
super().setUpClass()
cls.env = cls.env(context=dict(
cls.env.context,
test_queue_job_no_delay=True, # no jobs thanks
))
然后,您的所有测试都将同步执行作业方法,而不会延迟任何作业。
已知问题/路线图
在创建新数据库或在现有数据库上安装 queue_job 后,必须重新启动 Odoo 以使运行器检测到它。
当 Odoo 正常关闭时,它将等待运行中的作业完成。然而,当 Odoo 服务器崩溃或被强制停止时,运行中的作业在运行器没有机会知道它们已被终止的情况下被中断。在这种情况下,作业在 Odoo 服务器停止后可能仍然处于 已开始 或 已入队 状态。由于运行器无法知道它们是否实际上正在运行,并且无法确定是否可以安全地重新启动作业,因此它不会尝试自动重新启动它们。因此,这些陈旧的作业会填充运行队列,并阻止其他作业启动。因此,您必须手动重新入队它们,无论是从作业视图,还是通过运行以下 SQL 语句 在启动 Odoo 之前
update queue_job set state='pending' where state in ('started', 'enqueued')
变更日志
下一页
11.0.1.1.0 (2018-05-25)
错误跟踪器
错误在 GitHub Issues 上追踪。如有问题,请检查您的错误是否已被报告。如果您是第一个发现它的,请帮助我们消除它,提供详细且受欢迎的 反馈。
请不要直接联系贡献者以获取支持或帮助解决技术问题。
鸣谢
贡献者
Guwen Baconnier <guewen.baconnier@camptocamp.com>
Stéphane Bidoul <stephane.bidoul@acsone.eu>
Matthieu Dietrich <matthieu.dietrich@camptocamp.com>
Jos De Graeve <Jos.DeGraeve@apertoso.be>
David Lefever <dl@taktik.be>
Laurent Mignon <laurent.mignon@acsone.eu>
Laetitia Gangloff <laetitia.gangloff@acsone.eu>
Cédric Pigeon <cedric.pigeon@acsone.eu>
维护者
本模块由OCA维护。
OCA,即Odoo社区协会,是一个非营利组织,其使命是支持Odoo功能的协作开发并推广其广泛应用。
当前 维护者
本模块是GitHub上的OCA/queue项目的一部分。
欢迎您贡献。要了解如何贡献,请访问 https://odoo-community.org/page/Contribute。
项目详情
散列值 for odoo11_addon_queue_job-11.0.1.4.0-py2.py3-none-any.whl
算法 | 散列摘要 | |
---|---|---|
SHA256 | 8f73f3f02a38874f32834575616234fc35063fb5e593a4997234051aea07a6db |
|
MD5 | 999e97d4c7beded34b289402704e288f |
|
BLAKE2b-256 | dd00d6471cf272c605a1b904082a7c697acb125d000b50f23e11bab959f6e5c4 |