Les threads (ou processus en français) sont un moyen de répartir la charge d'un traitement sur plusieurs unités de calcul. Talend offre la possibilité de lancer des sous-jobs en multi-thread, afin de paralléliser les exécutions. Voici une proposition de mise en place d'un tel traitement.
Il faut tout d'abord isoler le traitement à lancer en thread, afin qu'il puisse être exécuté de façon indépendante. Créez un job et veillez notamment à bien gérer la concurrence entre les futurs threads, en n'écrivant pas dans des ressources partagées (fichiers, mêmes lignes d'une table en base de données...).
En cas de connexion à une base de données, le composant de connexion ne doit pas utiliser de connexion partagée (décocher la case "Utiliser ou enregistrer une connexion partagée à une base de données).
Il peut être intéressant que le thread lancé sache quel thread il représente. Aussi, vous pouvez ajouter deux paramètres dans le contexte indiquant le numéro de thread et le nombre de threads :
Ainsi, les logs pourront afficher les informations du thread en cours comme ceci :
Pour garder en tête que le traitement sera lancé en multi-thread, nommez le job avec un nom explicite ("threadImport" par exemple).
Créez ensuite un deuxième job. Placez sur le projet un tRunJob appelant le premier job créé et répétez cela autant de fois que vous souhaitez créer de threads. Dans l'exemple ci-dessous, 3 threads seront générés à l'exécution:
Sur les paramètres du tRunJob, vous pouvez affecter une valeur aux deux variables créées précédemment (num_thread et nb_threads) :
Dans les paramètres du Job parent, allez dans Extra et cochez Exécution multi-thread. Cette case à cocher précise que tous les sous-jobs contenus sur le traitement seront lancés en mode multi-thread, et non pas consécutivement.
Sauvez votre job et nommez-le avec un nom explicite, indiquant qu'il effectue du multi-thread (comme "multithreadImport").
Testez ensuite le traitement, vous devez avoir un affichage proche de ceci, dans un ordre d'exécution variable :
-- Lancement du thread 1/3 --
-- Lancement du thread 2/3 --
-- Lancement du thread 3/3 --
Il est possible de partager le traitement d'une liste entre les différents threads créés :
RSS | Informations |