Le rôle du threading est de permettre aux applications d'être réactives. Supposons que vous ayez une connexion à une base de données et que vous deviez répondre aux entrées de l'utilisateur. Sans threading, si la connexion à la base de données est occupée, l'application ne sera pas en mesure de répondre à l'utilisateur. En séparant la connexion à la base de données dans un thread distinct, vous pouvez rendre l'application plus réactive. De plus, comme les deux threads se trouvent dans le même processus, ils peuvent accéder aux mêmes structures de données - de bonnes performances et une conception logicielle flexible.
Notez qu'en raison de la GIL, l'application ne fait pas réellement deux choses à la fois, mais ce que nous avons fait, c'est placer le verrou de ressources sur la base de données dans un thread séparé afin que le temps CPU puisse être basculé entre lui et l'interaction avec l'utilisateur. Le temps CPU est rationné entre les threads.
Le multitraitement est destiné aux cas où vous souhaitez vraiment que plusieurs tâches soient effectuées à la fois. Supposons que votre application doive se connecter à 6 bases de données et effectuer une transformation matricielle complexe sur chaque ensemble de données. Le fait de placer chaque tâche dans un thread séparé pourrait aider un peu car lorsqu'une connexion est inactive, une autre pourrait obtenir du temps CPU, mais le traitement ne serait pas effectué en parallèle car la GIL signifie que vous n'utilisez jamais que les ressources d'un seul CPU. En plaçant chaque tâche dans un processus multiprocesseur, chacune d'entre elles peut être exécutée sur sa propre unité centrale et fonctionner à pleine efficacité.
7 votes
Je pense que cela peut être utile en général : blogs.datalogics.com/2013/09/25/ Bien qu'il puisse y avoir des choses intéressantes selon la langue. Par exemple, selon le lien d'Andrew Sledge, les threads python sont plus lents. En java, c'est tout le contraire, les processus java sont beaucoup plus lents que les threads, car il faut un nouveau jvm pour démarrer un nouveau processus.
5 votes
Aucune des deux premières réponses( sommet actuel , deuxième réponse )couvre les DGE de manière significative. Voici une réponse qui couvre l'aspect DGE : stackoverflow.com/a/18114882/52074
0 votes
@AndrasDeak pouvons-nous fermer dans l'autre sens comme prévu : meta.stackoverflow.com/questions/251938/ puisqu'il a beaucoup plus de votes positifs/réponses ?
1 votes
@CiroSantilli la raison pour laquelle j'ai choisi cette direction est que les réponses à cette question sont terribles. La réponse acceptée a peu de substance, dans le contexte de python, c'est inacceptable. La réponse la plus votée est meilleure, mais elle manque toujours d'explications appropriées. La réponse acceptée du dupe a une explication détaillée de l'un des meilleurs contributeurs (et enseignants) du tag, expliquant réellement ce que sont les "limitations de GIL" et pourquoi vous voudriez utiliser l'un ou l'autre. Je préférerais de loin garder le dupe dans cette direction. Je pense que nous en avons discuté dans le chat python, mais je peux demander des avis là-bas si vous le souhaitez.
0 votes
D'autant plus que les utilisateurs non enregistrés sont redirigés de la source de duplication vers la cible, je ne voudrais pas qu'ils trouvent ce message plutôt que la réponse d'abarnert.
0 votes
@AndrasDeak OK, je vais copier ma réponse ici alors, puisque c'est la meilleure XD
1 votes
@CiroSantilli ah, j'ai raté que vous aviez une réponse ici ! Quand je disais "les réponses [...] sont terribles" j'excluais bien sûr la présente entreprise ;) Je pense que ce serait beaucoup mieux d'avoir votre réponse ici !