Multiprocessing = plusieurs processus en cours d’exécution?

Je suis quelque peu confus au sujet du multitraitement. Je suis un programmeur Python de 3 ans, mais je n’ai jamais vraiment eu besoin d’exécuter des tâches en parallèle (pas seulement de manière asynchrone). Mais ce que je sais ou que je pensais savoir, c’est que lorsque vous utilisez le module de multiprocessing en Python pour obtenir un “vrai parallélisme”, de nouveaux processus python.exe sont générés!

Un logiciel 3D tel que Cinema 4D, par exemple, utilise la puissance de tous les processeurs disponibles pour restituer une scène 3D. Mais je ne vois pas plusieurs processus Cinema 4D.exe dans le Gestionnaire des tâches.

  1. Suis-je correct avec la déclaration ci-dessus, que plusieurs processus Python sont générés lors de l’utilisation du module de multiprocessing ?
  2. Si oui, pourquoi et comment l’application C ++ peut-elle utiliser tous les processeurs sans plusieurs processus?

Il est également possible d’utiliser plusieurs processeurs en exécutant plusieurs threads dans le même processus. Ce n’est pas ce que fait le module de multiprocessing Python.

Il y a un module de threading dans Python. Malheureusement, dans CPython, les threads ne sont pas aussi utiles que vous pourriez le penser, car ils se disputent tous sur le soi-disant “Global Interpreter Lock”. Ils sont donc beaucoup moins parallèles en Python qu’ils ne le sont dans de nombreuses autres langues. Si vous utilisez des threads, vous devez vous soucier des opérations réellement parallèles dans votre code. Si vous utilisez des processus, vous ne les utilisez pas (bien que vous puissiez vous inquiéter d’autres choses, comme partager des données).

Je ne sais pas si les implémentations alternatives ou non de Python ont le même problème avec le GIL. Mais à moins que vous n’écriviez du code spécifique pour Jython / IronPython / peu importe, les limitations de CPython s’appliquent à votre programme …

Suis-je correct avec la déclaration ci-dessus, que plusieurs processus Python sont générés lors de l’utilisation du module de multitraitement?

Oui c’est correct. Python doit générer de nouveaux processus (exécutant des interpréteurs supplémentaires) pour fonctionner en parallèle. C’est parce que le GIL ( GlobalInterpreterLock ) n’autorise qu’un seul thread d’exécution par interpréteur.

Si oui, pourquoi et comment l’application C ++ peut-elle utiliser tous les processeurs sans plusieurs processus?

Eh bien, sans doute, il n’existe pas de GIL dans Cinema4D – il peut donc exécuter plusieurs threads en parallèle.

En règle générale, vous exécutez plusieurs threads, pas plusieurs processus. L’exécution de threads plutôt que de processus présente de nombreux avantages. Le principal avantage est que toute la mémoire appartenant au processus est partagée entre les threads, où vous devez configurer un protocole de partage de la mémoire de sorting pour partager (une partie) des données entre différents processus.

Python et C ++ prennent tous deux en charge le mulithreading, mais comme mentionné ailleurs, le code python ne peut pas être exécuté sur plusieurs processeurs. Il est cependant utile pour faire des choses en “semi-parallèle” (j’ai utilisé des threads python pour lire un fichier et le lire sur la carte son, et en même temps enregistrer et enregistrer un autre fichier, tout en émettant d’autres commandes sur le port série pour contrôler l’équipement “sous test”).

Le multiprocessing module Python est en effet pour utiliser plusieurs processus séparés, ce qui aide à “casser le verrou de l’interpréteur python”.

En général, l’exécution dans des processus séparés est plus utile si vous voulez que le code soit complètement indépendant des autres tâches exécutées dans le système et qu’il ne soit pas nécessaire de partager beaucoup de données entre les processus, par exemple en calculant de très grands nombres premiers. serait une bonne chose à faire dans un processus indépendant [je veux dire ceux avec quelques centaines de milliers ou plus de chiffres] – le processus se déroule de lui-même sans autre apport pendant des heures et des heures, et il ne nécessite qu’une petite quantité de l’entrée qui ne change pas – le “nombre premier candidat”.