Projet

Général

Profil

Development #13617

lancer les tâches de l'agent en parallèle (?)

Ajouté par Frédéric Péters il y a plus de 7 ans. Mis à jour il y a plus de 5 ans.

Statut:
Fermé
Priorité:
Normal
Assigné à:
-
Catégorie:
-
Version cible:
-
Début:
16 octobre 2016
Echéance:
% réalisé:

0%

Temps estimé:
Patch proposed:
Oui
Planning:

Description

Aujourd'hui l'agent reçoit un message et lance hobo_notify pour les différents services concernés; dans notre archi SaaS avec un service par VM ça passe inaperçu, dans une archi avec tous les services sur le VM ça peut se sentir; il me semble qu'on pourrait utiliser multiprocessing pour faire digérer le message à plusieurs services en même temps. (pool.imap_unordered(...))


Fichiers

Révisions associées

Révision f2a9d917 (diff)
Ajouté par Frédéric Péters il y a plus de 7 ans

worker: run hobo processes in parallel (#13617)

Historique

#1

Mis à jour par Benjamin Dauvergne il y a plus de 7 ans

À mon avis on peut juste utiliser des threads, tout ce que fait l'agent c'est des fork (et je pense qu'on peut forker dans un thread).

#2

Mis à jour par Frédéric Péters il y a plus de 7 ans

Le gain est significatif en local (même si plutôt ×2 que ×4, pour avoir l'ensemble des deploy/notify exécutés).

#3

Mis à jour par Thomas Noël il y a plus de 7 ans

a priori processes=multiprocessing.cpu_count() c'est la valeur par défaut (et ne rien mettre évitera un crash si NotImplementedError).

#4

Mis à jour par Frédéric Péters il y a plus de 7 ans

En effet, "if processes is None then the number returned by cpu_count() is used".

#5

Mis à jour par Thomas Noël il y a plus de 7 ans

Une nuit plus tard, y'a encore une raison qui m'échappe dans l'utilisation de « pool.imap_unordered » au lieu de « pool.map ».

#6

Mis à jour par Frédéric Péters il y a plus de 7 ans

Sans connaitre les détails d'implémentation derrière, signifier explicitement qu'on se fout de l'ordre des résultats me paraissait une indication qui pouvait être utile.

#7

Mis à jour par Thomas Noël il y a plus de 7 ans

C'est bien possible (et je vais pas lire les implémentations non plus). Ack.

#8

Mis à jour par Frédéric Péters il y a plus de 7 ans

  • Statut changé de En cours à Résolu (à déployer)
commit f2a9d9170f208f249fcc873a66759916e0ca271f
Author: Frédéric Péters <fpeters@entrouvert.com>
Date:   Sat Jan 14 15:10:51 2017 +0100

    worker: run hobo processes in parallel (#13617)
#9

Mis à jour par Benjamin Dauvergne il y a plus de 7 ans

La différence c'est qu'imap_unordered renvoie je pense un générateur avec les résultats dans l'ordre où ils sont produits alors que map renvoie une liste qui respecte l'ordre initial et donc ça attend le dernier résultat avant de renvoyer quelque chose. Si on fait un pipeline de tâches (i.e. plusieurs map en cascade qui se nourissent les uns les autres), chaque map() va bloquer alors que imap_ordered() permettra au pipeline d'avancer en parallèle.

#10

Mis à jour par Frédéric Péters il y a plus de 5 ans

  • Statut changé de Résolu (à déployer) à Solution déployée

Formats disponibles : Atom PDF