Task QueueΒΆ
Tryton provides a way to run asynchronously some tasks. You must activate the
worker in the queue
section of the configuration and run the worker manager otherwise the tasks will be run at the end of the
transaction.
A task is the parameters that defines how to call a method from a
trytond.model.Model
. This include the
trytond.transaction.Transaction.context
, the
trytond.transaction.Transaction.user
and the arguments.
The first argument of the method must be an instance or a list of instances of
trytond.model.Model
. This other arguments must be JSON-ifiable.
A task is pushed into the queue
by calling the desired method on the
trytond.model.Model.__queue__
. This stores in the queue all the current
parameters of the call and it will be execute by a worker or at the end of the
transaction if no worker is configured.
The following trytond.transaction.Transaction.context
keys are used as
parameters for the queue:
queue_name
: The name of the queue. Default value isdefault
.
queue_scheduled_at
: Adatetime.timedelta
to add to current time to define when the task should be started. Default value isNone
which means directly.
queue_expected_at
: Adatetime.timedelta
to add to current time to define when the task should be finished. Default value isNone
which means as soon as possible.
Warning
There is no access right verification during the execution of the task.
Example:
from trytond.model import Model
class MyModel(Model):
"My Model"
__name__ = 'my_model'
@classmethod
def launch(cls, records):
for record in records:
cls.__queue__.process(record, 42)
def process(self, value):
self.value = value