作业队列
项目描述
此插件为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而非常高效
通道:为根通道及其子通道提供容量,并在其中隔离作业。例如,可以将重作业限制为一次执行一个,而轻量级作业可以一次执行4个。
重试:通过引发异常类型来重试作业的能力
重试模式:前三次尝试,10秒后重试,接下来的五次尝试,1分钟后重试,……
作业属性:优先级,预计到达时间(ETA),自定义描述,重试次数
相关操作:在作业视图中链接操作,例如打开受作业影响的记录
目录
安装
请确保已安装requests库。
配置
使用环境变量和命令行
调整环境变量(可选)
ODOO_QUEUE_JOB_CHANNELS=root:4 或任何其他通道配置。默认是 root:1
如果未设置 xmlrpc_port: ODOO_QUEUE_JOB_PORT=8069
使用 --load=web,web_kanban,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 服务器停止后仍然处于 已启动 或 已排队 状态。由于运行器无法知道它们是否实际上正在运行,并且无法确定是否可以安全地重新启动作业,因此它不会尝试自动重新启动它们。因此,这些过时的作业填充了运行队列,并阻止其他作业启动。因此,您必须手动重新排队它们,无论是从作业视图,还是通过在启动 Odoo 之前运行以下 SQL 语句
update queue_job set state='pending' where state in ('started', 'enqueued')
变更日志
下一页
10.0.1.0.0
从那里开始更改日志
错误跟踪器
错误在 GitHub Issues 上跟踪。如有问题,请检查是否已报告您的问题。如果您是第一个发现它的,请帮助我们通过提供详细且受欢迎的 反馈。
请勿直接联系贡献者以获取支持或帮助解决技术问题。
致谢
贡献者
Guewen 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。
项目详情
odoo10_addon_queue_job-10.0.1.2.0-py2-none-any.whl的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 71fa9e65dd026bca93d6c6f342ea3ed8d7182e97c6cb94ed616899875b35d16c |
|
MD5 | 603a4d5d876c5907b4429dfe8194b916 |
|
BLAKE2b-256 | ba1f390474e1da0b6678b28a05975a4b3416e1197583617a7d2a0184701df00a |