web-dev-qa-db-fra.com

concurrent.futures.ProcessPoolExecutor vs multiprocessing.pool.Pool

Veuillez m'expliquer quelle est la différence entre ces deux classes?

J'ai remarqué que le module multiprocessing existait dans Python 2. Mais fonctionnellement?

18
ArekBulski

Comme indiqué dans la documentation, concurrent.futures.ProcessPoolExecutor est un wrapper autour d'un multiprocessing.Pool. En tant que tel, les mêmes limitations de multiprocessing s'appliquent (par exemple, les objets doivent être décapables).

Cependant, concurrent.futures vise à fournir une interface abstraite qui peut être utilisée pour gérer différents types de tâches asynchrones de manière pratique. par exemple. changer votre stratégie asynchrone de l'utilisation de pools de processus à l'utilisation de threads est souvent aussi simple que de changer une ou deux lignes de code (plutôt que de devoir tout coder vous-même). Un autre avantage (connexe) de l'abstraction est que concurrent.futures fournit une API unique à retenir - Et vous pouvez choisir l'exécuteur qui convient le mieux à la tâche. Utilisez-vous votre processus IO lié? Génial, utilisez un ThreadPoolExecutor. Allez-vous avoir du mal à accélérer les choses à cause du Global Interpreter Lock (GIL)? Pas de problème, utilisez un ProcessPoolExecutor.

35
mgilson