multitraitement vs multithreading vs asyncio en Python 3.4
J'ai trouvé que dans Python 3.4 il y a quelques différentes bibliothèques de multitraitement/filetage: multitraitement vs filetage vs asyncio.
, Mais je ne sais pas lequel utiliser ou est le "recommandé". Font-ils la même chose ou sont-ils différents? Si oui, lequel est utilisé pour quoi? Je veux écrire un programme qui utilise multicores dans mon ordinateur. Mais je ne sais pas quelle bibliothèque je devrais apprendre.
2 réponses
Ils sont destinés à des fins et/ou des exigences (légèrement) différentes. CPython (une implémentation Python typique en ligne principale) a toujours le verrou d'interpréteur global , donc une application multithread (une manière standard d'implémenter le traitement parallèle de nos jours) est sous-optimale. C'est pourquoi multiprocessing
peut - préférence sur threading
. Mais tous les problèmes ne peuvent pas être efficacement divisés en morceaux [presque indépendants], donc il peut y avoir un besoin de communications interprocessus lourdes. C'est pourquoi multiprocessing
peut ne pas être préféré à threading
en général.
asyncio
(cette technique est disponible non seulement en Python, d'autres langages et / ou frameworks l'ont également, par exemple Boost.ASIO ) est une méthode pour gérer efficacement un grand nombre d'opérations d'E/S à partir de nombreuses sources simultanées sans avoir besoin d'exécution de code parallèle. Donc c'est juste une solution (une bonne en effet!) pour une tâche particulière, pas pour le traitement parallèle en général.
[Réponse Rapide]
TL; DR:
Faire le bon choix:
Nous avons parcouru les formes de concurrence les plus populaires. Mais la question reste - quand choisir lequel? Cela dépend vraiment du cas d'utilisation. D'après mon expérience (et ma lecture), j'ai tendance à suivre ce pseudo code:
if io_bound:
if io_very_slow:
print("Use Asyncio")
else:
print("Use Threads")
else:
print("Multi Processing")
- CPU lié = > multi traitement
- E / S liées, E / S rapides, nombre limité de connexions = > multi Threading
- E / S Lié, E / S lentes, nombreuses connexions = > Asyncio