Aborder le multithreading et le multiprocessing de manière transparente et Pythonique
[EuroPython 2018 - Conférence - 2018-07-27 - PyCharm [PyData]]
[Édimbourg, Royaume-Uni]
Par David Liu
Avec l'augmentation de la puissance de calcul, exploiter et contrôler son code en dehors du domaine mono-thread devient un problème de plus en plus pressant, associé au désir de rester dans la couche Python. Avec les récents outils et frameworks publiés, échapper au GIL de manière propre est beaucoup plus facile qu'auparavant, permettant à son code Python d'utiliser efficacement les architectures multi-cœurs et de nombreux cœurs de la manière la plus Pythonique possible. Dans cette conférence, apprenez à utiliser le multiprocessing statique pour le pinning de processus, et à équilibrer efficacement les pools de threads avec un import modifié des modules de threading.
Aperçu :
Introduction au multithreading et au multiprocessing en Python
Historique du multithreading et du multiprocessing en Python, frameworks classiques
Problèmes pouvant survenir (surdéploiement, problèmes de parallélisme imbriqué, changement de processus, ressources de pool sur des machines partagées)
Accès de Python à du matériel plus puissant au cours des dernières années (28+ cœurs, etc.)
Quand rester dans le GIL, et quand en sortir
Les avantages et la sécurité du GIL
Sortie du GIL au niveau de Python ; analyse de quand revenir au mono-thread, et quand le multithreading est une mauvaise idée trompeuse
Responsabilité des frameworks qui sortent nativement du GIL
Les nouvelles bibliothèques et techniques de multithreading et de multiprocessing
module de multiprocessing statique (smp) (et patching de multiprocessing)
contrôle du pool de threads avec des appels en ligne de commande de Python ( python -m tbb -p 8)
Mettre le tout ensemble
Exemples d'utilisation du multiprocessing statique sur une grande machine pour éviter le surdéploiement
Exemple de processus pseudo-démon sur une machine à 4 cœurs par pinning de processeur
Contrôle du pool de threads sur un exemple simple avec NumPy
Résumé - Meilleures pratiques pour utiliser les méthodes ci-dessus pour contrôler le multithreading et le multiprocessing
Ce qui doit être fait dans le domaine (frameworks et éléments à exposer)
Problèmes qui existent encore dans le domaine
Q&A