Queue

Job

class connector.queue.job.Job(func=None, model_name=None, args=None, kwargs=None, priority=None, eta=None, job_uuid=None, max_retries=None, description=None)[source]

Bases : object

Un job est une tâche à exécuter.

connector.queue.job.uuid

Id (UUID) du job.

connector.queue.job.worker_uuid

Quand le job est placé dans la queue, UUID du worker.

connector.queue.job.state

État du job, peut être en attente, en queue, démarré, terminé, échoué. L’état initial est en attente et l’état final est terminé.

connector.queue.job.retry

L’essai actuel, démarre à 0 et s’incrémente de 1 chaque fois que le job est exécuté.

connector.queue.job.max_retries

Le nombre maximum d’essais permis avant que le job soit considéré comme échoué.

connector.queue.job.func_name

Nom de la fonction (sous la forme module.nom_fonction).

connector.queue.job.args

Arguments transmis à la fonction pendant l’exécution.

connector.queue.job.kwargs

Arguments nommés transmis à la fonction pendant l’exécution.

connector.queue.job.func_string

Chaîne complète représentant la fonction à exécuter, càd module.fonction(args, kwargs)

connector.queue.job.description

Description du job à destination des utilisateurs.

connector.queue.job.func

La fonction Python elle-même.

connector.queue.job.model_name

Modèle OpenERP pour lequel le job va fonctionner.

connector.queue.job.priority

Priorité du job, 0 étant la plus haute priorité.

connector.queue.job.date_created

Date et heure de création du job.

connector.queue.job.date_enqueued

Date et heure de mise en queue du job.

connector.queue.job.date_started

Date et heure de démarrage du job.

connector.queue.job.date_done

Date et heure d’arrêt du job.

connector.queue.job.result

Une description du résultat (à destination des utilisateurs).

connector.queue.job.exc_info

Informations sur l’Exception (`traceback’) ayant causé l’échec du job

connector.queue.job.user_id

Id de l’utilisateur OpenERP qui a créé le job

connector.queue.job.eta

Heure estimée de lancement (ETA) du job. Il ne sera pas exécuté avant cette date/heure.

connector.queue.job.canceled

True si le job a été annulé.

Job.cancel(msg=None)[source]
Job.description
Job.eta
Job.func
Job.func_string
Job.perform(session)[source]

Exécute le job.

Le job est exécuté avec l’utilisateur qui l’a initié.

Paramètres:session (ConnectorSession) – session d’exécution du job
Job.postpone(result=None, seconds=None)[source]

Écrit un heure estimée de lancement dans n secondes. Utilisé quand une Exception non fatale souhaite relancer un job.

Job.related_action(session)[source]
Job.set_done(result=None)[source]
Job.set_enqueued(worker)[source]
Job.set_failed(exc_info=None)[source]
Job.set_pending(result=None)[source]
Job.set_started()[source]
Job.uuid

Id du job, c’est un UUID

class connector.queue.job.JobStorage[source]

Bases : object

Interface pour le stockage des jobs

JobStorage.exists(job_uuid)[source]

Indique si un job existe encore dans l’espace de stockage.

JobStorage.load(job_uuid)[source]

Lit les donnés du job dans l’espace de stockage

JobStorage.store(job_)[source]

Stocke un job

class connector.queue.job.OpenERPJobStorage(session)[source]

Bases : connector.queue.job.JobStorage

Stocke un job dans OpenERP

OpenERPJobStorage.db_record(job_)[source]
OpenERPJobStorage.db_record_from_uuid(job_uuid)[source]
OpenERPJobStorage.enqueue(func, model_name=None, args=None, kwargs=None, priority=None, eta=None, max_retries=None, description=None)[source]

Crée un job et le met en queue. Renvoie le UUID du job.

S’attend à ce que les arguments spécifiques au job soient déjà extraites de ceux à passer à la fonction du job.

OpenERPJobStorage.enqueue_resolve_args(func, *args, **kwargs)[source]

Crée un job et le met en queue. Renvoie le UUID du job.

OpenERPJobStorage.exists(job_uuid)[source]

Indique si un job existe encore dans l’espace de stockage.

OpenERPJobStorage.load(job_uuid)[source]

Lit un job depuis la base de données

OpenERPJobStorage.store(job_)[source]

Stocke le job

connector.queue.job.job(func)[source]

Décorateur pour les jobs.

Ajoute un attribut delay sur la fonction décorée.

Quand delay est appelée, la fonction est transformée en job et stockée dans le modèle OpenERP queue.job. Les arguments positionnels et nommés transmis à delay seront les arguments utilisés par la fonction décorée lorsqu’elle sera exécutée.

La fonction delay() d’un job reçoit les arguments suivants :

session

ConnectorSession en cours

model_name

nom du modèle sur lequel le job a quelque chose à faire

*args et **kargs

Arguments positionnels et nommés qui seront transmis à la fonction une fois que le job est exécuté. Ils doivent être « pickle-able ».

Il existe 4 arguments nommés spéciaux et réservés que vous pouvez utiliser :

  • priority : priorité du job, une valeur plus petite étant prioritaire.

    10 par défaut.

  • max_retries : nombre maximal d’essais avant d’abandonner et définir

    l’état du job à échoué. Une valeur de 0 signifie un nombre infini d’essais. Par défaut la valeur est 5.

  • eta : le job ne peut être exécuté qu’après cette datetime

    (ou maintenant + timedelta si un timedelta ou un entier est fourni)

  • description
    : a human description of the job,

    destinée à différencier les instances de job (Par défaut func.__doc__ ou

    ‘Function %s’ % func.__name__)

Exemple :

@job
def export_one_thing(session, model_name, one_thing):
    # work
    # export one_thing

export_one_thing(session, 'a.model', the_thing_to_export)
# => normal and synchronous function call

export_one_thing.delay(session, 'a.model', the_thing_to_export)
# => the job will be executed as soon as possible

export_one_thing.delay(session, 'a.model', the_thing_to_export,
                       priority=30, eta=60*60*5)
# => the job will be executed with a low priority and not before a
# delay of 5 hours from now

Voir aussi : related_action() une action connexe peut être attachée à un job

connector.queue.job.related_action(action=<function <lambda> at 0xb19adbc>, **kwargs)[source]

Attache une action connexe à un job

Un action connexe apparaîtra comme un bouton dans la vue OpenERP. Le bouton exécutera l’action, habituellement une ouverture de formulaire de l’enregistrement lié au job.

L’action doit être un objet callable qui prends les arguments

session, job, **kwargs

Exemple d’utilisation :

def related_action_partner(session, job):
    model = job.args[0]
    partner_id = job.args[1]
    # eventually get the real ID if partner_id is a binding ID
    action = {
        'name': _("Partner"),
        'type': 'ir.actions.act_window',
        'res_model': model,
        'view_type': 'form',
        'view_mode': 'form',
        'res_id': partner_id,
    }
    return action

@job
@related_action(action=related_action_partner)
def export_partner(session, model_name, partner_id):
    # ...

Les kwargs sont transmis à l’action :

def related_action_product(session, job, extra_arg=1):
    assert extra_arg == 2
    model = job.args[0]
    product_id = job.args[1]

@job
@related_action(action=related_action_product, extra_arg=2)
def export_product(session, model_name, product_id):
    # ...

Worker

class connector.queue.worker.Worker(db_name, watcher_)[source]

Bases : threading.Thread

Poste et récupère des jobs de la queue, les exécute

Worker.enqueue_job_uuid(job_uuid)[source]

Met un job en queue :

Il sera exécuté par le worker aussi tôt que possible (en fonction de la priorité du job)

Worker.job_storage_class

alias de OpenERPJobStorage

Worker.queue_class

alias de JobsQueue

Worker.run()[source]

Boucle principale du worker

Vérifie s’il existe encore dans le watcher. Quand il n’existe plus, il sort de la boucle de façon que le thread s’arrête proprement.

Attend les jobs et les exécute séquentiellement.

Worker.run_job(job)[source]

Exécute un job

class connector.queue.worker.WorkerWatcher[source]

Bases : threading.Thread

Garde un œil sur les workers et signale leur changement d’état.

Un WorkerWatcher est partagé entre plusieurs bases de données, donc seule une instance est nécessaire pour vérifier l’état des workers pour chaque base de données.

static WorkerWatcher.available_db_names()[source]

Renvoie les bases de données du serveur où le module connector est installé

Disponible signifie qu’elles peuvent être utilisées par un Worker.

Retourne:Noms des bases de données
Type retourné:list
WorkerWatcher.check_alive(db_name, worker)[source]

Vérifie si le worker est toujours vivant et signale son état. Vérifie si les autres workers sont toujours vivants, et si ce n’est pas le cas, les retire du pool de workers.

WorkerWatcher.run()[source]

boucle principale du WorkerWatcher

WorkerWatcher.worker_for_db(db_name)[source]
WorkerWatcher.worker_lost(worker)[source]

Indique si un worker n’est plus référencé par l’observateur.

Utilisé par les threads de worker pour savoir s’ils doivent s’arrêter.

connector.queue.worker.start_service()[source]

Démarre l’observateur

Queue

class connector.queue.queue.JobsQueue[source]

Bases : object

Contient en mémoire les jobs dont l’exécution est planifiée.

Les jobs sont triés, plus la priorité est importante, plus tôt les jobs sont dépilés de la queue.

JobsQueue.dequeue()[source]

Dépile et renvoie le premier job en fonction de sa priorité

JobsQueue.enqueue(job)[source]

Modèles

class connector.queue.model.QueueJob(pool, cr)[source]

Bases : openerp.models.Model

État du job et résultat

QueueJob.active
QueueJob.autovacuum(*args, **kwargs)[source]

Efface tous les jobs (actifs ou non) qui sont terminés depuis plus de _removal_interval jours.

Appelé depuis une tâche planifiée (cron).

QueueJob.button_done(*args, **kwargs)[source]
QueueJob.company_id

La valeur d’un tel champ est un recordset de taille 0 (pas d’enregistrement) ou 1 (enregistrement unique).

Paramètres:
  • comodel_name – nom du modèle cible (chaîne de caractères)
  • domain – un domain optionnel à définir sur les valeurs candidates côté client (domain ou string)
  • context – un context optionnel à utiliser côté client à la prise en charge de ce champ (dictionnaire)
  • ondelete – quoi faire quand l’enregistrement en rapport est effacé ; les valeurs possibles sont : 'set null', 'restrict', 'cascade'
  • auto_join – si les JOINs sont générés lors de la recherche sur ce champ (booleen, par défaut False)
  • delegate – définir à True pour rendre les champs du modèle cible accessibles depuis le modèle en cours (correspond à _inherits)

The attribute comodel_name is mandatory except in the case of related fields or field extensions.

QueueJob.date_created
QueueJob.date_done
QueueJob.date_enqueued
QueueJob.date_started
QueueJob.eta
QueueJob.exc_info

Très similaire à Char mais utilisé pour des contenus plus longs, sans taille spécifiée et généralement affiché dans une boite de texte multi-lignes.

Paramètres:translate – si la valeur de ce champ peut être traduite ou non
QueueJob.func
QueueJob.func_string

Champ chaîne de caractère basique, peut être limité en longeur, habituellement affiché comme ligne unique dans les clients

Paramètres:
  • size (int) – la taille maximum des valeurs stockées dans ce champ
  • translate (bool) – si les valeurs de ce champ peuvent être traduites
QueueJob.max_retries
QueueJob.model_name

Champ chaîne de caractère basique, peut être limité en longeur, habituellement affiché comme ligne unique dans les clients

Paramètres:
  • size (int) – la taille maximum des valeurs stockées dans ce champ
  • translate (bool) – si les valeurs de ce champ peuvent être traduites
QueueJob.name

Champ chaîne de caractère basique, peut être limité en longeur, habituellement affiché comme ligne unique dans les clients

Paramètres:
  • size (int) – la taille maximum des valeurs stockées dans ce champ
  • translate (bool) – si les valeurs de ce champ peuvent être traduites

Ouvre l’action associée au job

QueueJob.priority
QueueJob.requeue(*args, **kwargs)[source]
QueueJob.result

Très similaire à Char mais utilisé pour des contenus plus longs, sans taille spécifiée et généralement affiché dans une boite de texte multi-lignes.

Paramètres:translate – si la valeur de ce champ peut être traduite ou non
QueueJob.retry
QueueJob.state
Paramètres:
  • selection – specifies the possible values for this field. It is given as either a list of pairs (value, string), or a model method, or a method name.
  • selection_add – provides an extension of the selection in the case of an overridden field. It is a list of pairs (value, string).

The attribute selection is mandatory except in the case of related fields or field extensions.

QueueJob.user_id

La valeur d’un tel champ est un recordset de taille 0 (pas d’enregistrement) ou 1 (enregistrement unique).

Paramètres:
  • comodel_name – nom du modèle cible (chaîne de caractères)
  • domain – un domain optionnel à définir sur les valeurs candidates côté client (domain ou string)
  • context – un context optionnel à utiliser côté client à la prise en charge de ce champ (dictionnaire)
  • ondelete – quoi faire quand l’enregistrement en rapport est effacé ; les valeurs possibles sont : 'set null', 'restrict', 'cascade'
  • auto_join – si les JOINs sont générés lors de la recherche sur ce champ (booleen, par défaut False)
  • delegate – définir à True pour rendre les champs du modèle cible accessibles depuis le modèle en cours (correspond à _inherits)

The attribute comodel_name is mandatory except in the case of related fields or field extensions.

QueueJob.uuid

Champ chaîne de caractère basique, peut être limité en longeur, habituellement affiché comme ligne unique dans les clients

Paramètres:
  • size (int) – la taille maximum des valeurs stockées dans ce champ
  • translate (bool) – si les valeurs de ce champ peuvent être traduites
QueueJob.worker_id

La valeur d’un tel champ est un recordset de taille 0 (pas d’enregistrement) ou 1 (enregistrement unique).

Paramètres:
  • comodel_name – nom du modèle cible (chaîne de caractères)
  • domain – un domain optionnel à définir sur les valeurs candidates côté client (domain ou string)
  • context – un context optionnel à utiliser côté client à la prise en charge de ce champ (dictionnaire)
  • ondelete – quoi faire quand l’enregistrement en rapport est effacé ; les valeurs possibles sont : 'set null', 'restrict', 'cascade'
  • auto_join – si les JOINs sont générés lors de la recherche sur ce champ (booleen, par défaut False)
  • delegate – définir à True pour rendre les champs du modèle cible accessibles depuis le modèle en cours (correspond à _inherits)

The attribute comodel_name is mandatory except in the case of related fields or field extensions.

QueueJob.write(*args, **kwargs)[source]
class connector.queue.model.QueueWorker(pool, cr)[source]

Bases : openerp.models.Model

Worker

QueueWorker.assign_jobs(*args, **kwargs)[source]

Affecte n jobs au worker du processus en cours

n est max_jobs ou illimité si max_jobs est None

Paramètres:max_jobs (int) – nombre maximal de jobs à affecter à un worker
QueueWorker.assign_then_enqueue(*args, **kwargs)[source]

Affecte tous les jobs non encore affectés à un worker. Puis met en queue tous les jobs qui ont un worker mais qui ne sont pas dans la queue.

Chaque opération est atomique.

Avertissement

valide la transaction. cr.commit() est appelé, donc veuillez appeler cette méthode dans vos propres transactions, pas dans la transaction principale d’OpenERP

Paramètres:max_jobs (int) – nombre maximal de jobs à affecter à un worker
QueueWorker.date_alive
QueueWorker.date_start
QueueWorker.enqueue_jobs(*args, **kwargs)[source]

Met en queue tous les jobs affectés au worker du processus en cours

QueueWorker.job_ids

One2many field; the value of such a field is the recordset of all the records in comodel_name such that the field inverse_name is equal to the current record.

Paramètres:
  • comodel_name – nom du modèle cible (chaîne de caractères)
  • inverse_name – name of the inverse Many2one field in comodel_name (string)
  • domain – un domain optionnel à définir sur les valeurs candidates côté client (domain ou string)
  • context – un context optionnel à utiliser côté client à la prise en charge de ce champ (dictionnaire)
  • auto_join – si les JOINs sont générés lors de la recherche sur ce champ (booleen, par défaut False)
  • limit – limite optionnelle à utiliser à la lecture (entier)

The attributes comodel_name and inverse_name are mandatory except in the case of related fields or field extensions.

QueueWorker.pid

Champ chaîne de caractère basique, peut être limité en longeur, habituellement affiché comme ligne unique dans les clients

Paramètres:
  • size (int) – la taille maximum des valeurs stockées dans ce champ
  • translate (bool) – si les valeurs de ce champ peuvent être traduites
QueueWorker.uuid

Champ chaîne de caractère basique, peut être limité en longeur, habituellement affiché comme ligne unique dans les clients

Paramètres:
  • size (int) – la taille maximum des valeurs stockées dans ce champ
  • translate (bool) – si les valeurs de ce champ peuvent être traduites
QueueWorker.worker_timeout = 300
class connector.queue.model.RequeueJob(pool, cr)[source]

Bases : openerp.models.TransientModel

RequeueJob.job_ids

Champ many2many ; la valeur d’un tel champ est un recordset.

Paramètres:comodel_name – nom du modèle cible (chaîne de caractères)

The attribute comodel_name is mandatory except in the case of related fields or field extensions.

Paramètres:
  • relation – nom optionnel de la table qui stocke la relation dans la base de données (string)
  • column1 – optional name of the column referring to “these” records in the table relation (string)
  • column2 – optional name of the column referring to “those” records in the table relation (string)

The attributes relation, column1 and column2 are optional. If not given, names are automatically generated from model names, provided model_name and comodel_name are different!

Paramètres:
  • domain – un domain optionnel à définir sur les valeurs candidates côté client (domain ou string)
  • context – un context optionnel à utiliser côté client à la prise en charge de ce champ (dictionnaire)
  • limit – limite optionnelle à utiliser à la lecture (entier)
RequeueJob.requeue(*args, **kwargs)[source]