Je ne sais pas si le multithreading fonctionne ou non en Python.
Je sais qu'il y a eu beaucoup de questions à ce sujet et j'en ai lu beaucoup, mais je suis toujours confus. Je sais d'après ma propre expérience et j'ai vu d'autres personnes publier leurs propres réponses et exemples ici sur StackOverflow que le multithreading est en effet possible en Python. Alors pourquoi tout le monde continue-t-il à dire que Python est verrouillé par le GIL et qu'un seul thread peut s'exécuter à la fois? Cela fonctionne clairement. Ou y a-t-il une distinction que je ne parviens pas ici?
De nombreuses affiches / répondants continuent également de mentionner que le filetage est limité car il n'utilise pas plusieurs cœurs. Mais je dirais qu'ils sont toujours utiles car ils fonctionnent simultanément et accélèrent ainsi la charge de travail combinée. Je veux dire, pourquoi y aurait-il même un module de thread Python autrement?
Mettre à jour:
Merci pour toutes les réponses à ce jour. La façon dont je comprends les choses est que le multithreading ne fonctionnera qu'en parallèle pour certaines tâches d'E / S, mais ne peut en exécuter qu'une à la fois pour les tâches de base multiples liées au processeur.
Je ne suis pas tout à fait sûr de ce que cela signifie pour moi en termes pratiques, je vais donc simplement donner un exemple du type de tâche que j'aimerais effectuer en multithread. Par exemple, disons que je souhaite parcourir une très longue liste de chaînes et que je souhaite effectuer des opérations de base sur les chaînes sur chaque élément de la liste. Si je divise la liste, envoie chaque sous-liste à traiter par mon code de boucle / chaîne dans un nouveau thread, et renvoie les résultats dans une file d'attente, ces charges de travail s'exécuteront-elles à peu près en même temps? Plus important encore, cela accélérera-t-il théoriquement le temps nécessaire à l'exécution du script?
Un autre exemple pourrait être si je peux rendre et enregistrer quatre images différentes en utilisant PIL dans quatre threads différents, et est-ce que cela est plus rapide que de traiter les images une par une après l'autre? Je suppose que ce composant de vitesse est ce que je me demande vraiment plutôt que quelle est la terminologie correcte.
Je connais également le module de multitraitement, mais mon intérêt principal pour le moment est pour les charges de tâches petites à moyennes (10-30 secondes) et je pense donc que le multithreading sera plus approprié car les sous-processus peuvent être lents à démarrer.