This talk is about the "Connector" [1] addon, but focused on the Jobs Queue, which can be used independently of any "connection". We will show, with examples, how we can use this module to delay intensive tasks which would block the users if they were executed synchronously. We'll also see how we can optimize the workload of the jobs using different Job Channels.
[1] http://odoo-connector.com
1. A Jobs Queue for processing tasks
asynchronously
Guewen Baconnier & Leonardo Pistone
Camptocamp
1 / 32
2. Guewen Baconnier
Developer @ Camptocamp
OCA committer, OCA Delegate
Connector author
@guewenb
@guewen
Leonardo Pistone
Developer @ Camptocamp
OCA committer, OCA Delegate
@lepistone
About us
2 / 32
27. B C
Now + 6:00 + 12:00 +18:00 + 24:00
A
ETA
import_order.delay(session,1) #A
import_order.delay(session,1,eta=6*60*60) #B
import_order.delay(session,2,eta=datetime.now()+timedelta(days=1)) #C
22 / 32
31. Outdating Data in jobs can become outdated.
No:
@job
defexample(session,record_id,vals):
export(record_id,vals)
Yes:
@job
defexample(session,record_id):
export(session.env['model'].browse(record_id))
25 / 32
32. Outdating
Existence
A job can refer to a record which has been deleted. Always
check if it still exists.
No:
@job
defexample(session,record_id):
export(session.env['model'].browse(record_id))
Yes:
@job
defexample(session,record_id):
record=session.env['model'].browse(record_id)
ifrecord.exists():
export(record)
26 / 32
33. Outdating
Existence
Idempotence
A job should, when possible, produce the same result
when executed several times.
No:
@job
defexample(session,record_id):
export(session.env['model'].browse(record_id))
Yes:
@job
defexample(session,record_id):
record=session.env['model'].browse(record_id)
ifrecord.exists():
ifnotrecord.exported:
export(session.env['model'].browse(record_id))
27 / 32