web-dev-qa-db-fra.com

Quelle est la différence entre le multitraitement et le sous-processus?

Mon travail devrait utiliser des techniques parallèles, et je suis un nouvel utilisateur de python. Je me demande donc si vous pourriez partager des informations sur les modules python multiprocessing et subprocess. Quelle est la différence entre ces deux?

55
Jun HU

Le module subprocess vous permet d'exécuter et de contrôler d'autres programmes. Tout ce que vous pouvez démarrer avec la ligne de commande sur l'ordinateur, peut être exécuté et contrôlé avec ce module. Utilisez-le pour intégrer des programmes externes dans votre code Python.

Le module multiprocessing vous permet de diviser les tâches écrites en python sur plusieurs processus pour améliorer les performances. Il fournit une API très similaire au module threading; il fournit méthodes pour partager des données entre les processus qu'il crée, et rend la tâche de gérer plusieurs processus pour exécuter Python (beaucoup) plus facile. En d'autres termes, multiprocessing vous permet de profiter de plusieurs processus pour accomplir vos tâches plus rapidement en exécutant du code en parallèle.

73
Martijn Pieters

Si vous souhaitez appeler un programme externe (en particulier un programme non écrit en Python), utilisez subprocess.

Si vous souhaitez appeler une fonction Python dans un sous-processus, utilisez multiprocessing.

(Si le programme est écrit en Python, mais est également importable, j'essayerais d'appeler ses fonctions en utilisant multiprocessing, plutôt que de l'appeler en externe via subprocess.)

29
unutbu

Le sous-processus génère de nouveaux processus, mais à part stdin/stdout et toutes les autres API que l'autre programme peut implémenter, vous n'avez aucun moyen de communiquer avec eux. Son objectif principal est de lancer des processus complètement distincts de votre propre programme.

Le multitraitement génère également de nouveaux processus, mais ils exécutent votre code et sont conçus pour communiquer entre eux. Vous l'utilisez pour diviser les tâches au sein de votre propre programme sur plusieurs cœurs de processeur.

14
DNS