Press "Enter" to skip to content

Y a-t-il des problèmes avec le multitraitement en Python ?

Le module de multitraitement de Python fournit une interface pour générer et gérer des processus enfants qui est familière aux utilisateurs du module de threading. Un problème avec le module de multitraitement, cependant, est que les exceptions dans les processus enfants engendrés n'impriment pas les traces de la pile : Considérez l'extrait suivant :

Q. Y a-t-il des problèmes avec le module de multitraitement ?

Un problème avec le module de multitraitement, cependant, est que les exceptions dans les processus enfants générés n'impriment pas les traces de la pile : Considérez l'extrait suivant : et le message d'erreur suivant :

Q. Pourquoi mon pool de multitraitement est-il bloqué en Python ?

La cause est deux problèmes avec la poursuite de l'exécution de code après un fork() -sans- execve() : fork() copie tout en mémoire. Mais il ne copie pas tout. Lorsque vous faites un fork (), il copie tout en mémoire. Cela inclut toutes les variables globales que vous avez définies dans les modules Python importés. Par exemple, votre configuration de journalisation :

Q. Comment les objets de file d'attente sont-ils utilisés dans le multitraitement en Python ?

Lorsque nous transmettons des données entre processus, nous pouvons alors utiliser l'objet Queue. Dans cet exemple, créez d'abord une fonction qui vérifie si un nombre est pair ou non. Si le nombre est pair, insérez-le à la fin de la file d'attente. Ensuite, nous créons un objet file d'attente et un objet processus, puis nous démarrons le processus.

Q. Comment communiquer entre plusieurs processus en Python ?

L'utilisation efficace de plusieurs processus nécessite généralement une certaine communication entre eux, de sorte que le travail peut être divisé et les résultats peuvent être agrégés. Un moyen simple de communiquer entre les processus avec le multitraitement consiste à utiliser une file d'attente pour faire passer des messages dans les deux sens. Tout objet pickle-able peut passer par une file d'attente.

Q. Qu'est-ce que l'objet événement en multiprocessus en Python ?

Je recommande d'utiliser un objet multiprocessing.Event. Un objet Event est un indicateur True/False, initialisé à False, qui peut être défini en toute sécurité sur True dans un environnement multiprocessus tandis que d'autres processus peuvent le vérifier avec is-set () et attendre qu'il passe à True.

Q. Que se passe-t-il si vous arrêtez le processus principal en Python ?

Sinon, l'arrêt du processus principal pourrait entraîner un blocage ou un sous-processus zombie orphelin. La procédure normale consiste à définir l'indicateur d'arrêt, à attendre que tous les processus s'arrêtent normalement dans un délai raisonnable, puis à terminer ceux qui ne se sont pas encore arrêtés.