Python sont des fils bogué?

voix
24

Un ami codeur fiable m'a dit que la mise en oeuvre multi-thread courant de Python est sérieusement bogué - assez pour éviter d'utiliser tout à fait. Que peut dire sur cette rumeur?

Créé 29/08/2008 à 04:43
source utilisateur
Dans d'autres langues...                            


6 réponses

voix
-2

Je l'ai utilisé dans plusieurs applications et ont jamais eu, ni entendu parler de quoi que ce soit threading être autre que fiable à 100%, aussi longtemps que vous connaissez ses limites. Vous ne pouvez pas reproduire 1000 threads en même temps et attendre votre programme fonctionne correctement sous Windows, mais vous pouvez facilement écrire un pool de travailleurs et juste nourrir 1000 opérations, et tout garder bien sous contrôle.

Créé 29/08/2008 à 04:50
source utilisateur

voix
4

Pour autant que je sais qu'il n'y a pas de bugs réels, mais la performance lors de l' enfilage dans CPython est vraiment mauvais ( par rapport à la plupart des autres implémentations de threads, mais généralement assez bon si tous la plupart des threads n'est bloc) en raison du GIL (Global Interpreter Lock), si vraiment il est mise en œuvre spécifique plutôt que la langue spécifique. Jython, par exemple, ne souffre pas de ce dû à l' aide du modèle de fil Java.

Voir ce message pourquoi il est pas vraiment possible de retirer le GIL de la mise en œuvre CPython, et ce pour une élaboration pratique et des solutions de contournement.

Faites un rapide Google pour « Python GIL » pour plus d' informations.

Créé 29/08/2008 à 04:58
source utilisateur

voix
50

Fils de Python sont bonnes pour la programmation d' E / S simultanées . Les fils sont permutées de la CPU dès qu'ils bloquent en attente pour l' entrée de fichier, réseau, etc. Cela permet à d' autres fils de Python d'utiliser le CPU tandis que d' autres attendent. Cela vous permettra d'écrire un serveur web multi-thread ou crawler web, par exemple.

Cependant, le fil python sont sérialisés par le GIL quand ils entrent noyau de l' interpréteur. Cela signifie que si deux fils sont des nombres crissement, un seul peut fonctionner à un moment donné. Cela signifie également que vous ne pouvez pas tirer parti des architectures multi-core ou multi-processeurs.

Il existe des solutions comme l'exécution de plusieurs interprètes Python en même temps, en utilisant une bibliothèque de threads en fonction C. Ce n'est pas pour les faibles de cœur et les avantages pourrait ne pas être en vaut la peine. Espérons que pour une solution universelle Python dans une version future.

Créé 29/08/2008 à 05:33
source utilisateur

voix
8

Le GIL (Global Interpreter Lock) est peut - être un problème, mais l'API est tout à fait OK. Essayez l'excellent processingmodule, qui implémente l'API Threading pour les processus séparés. J'utilise ce moment (bien que sur OS X, ont encore à faire des tests sur Windows) et je suis vraiment impressionné. La classe File d'attente est vraiment économiser mon lard en termes de gestion de la complexité!

EDIT : il seemes le module de traitement est inclus dans la bibliothèque standard de la version 2.6 ( import multiprocessing). Joie!

Créé 29/08/2008 à 05:55
source utilisateur

voix
15

La mise en œuvre standard de Python (généralement connu sous le nom CPython comme il est écrit en C) utilise des threads OS, mais comme il est le mondial interprète de verrouillage , un seul thread à la fois est autorisé à exécuter du code Python. Mais dans ces limites, les bibliothèques de filetage sont robustes et largement utilisé.

Si vous voulez être en mesure d'utiliser plusieurs cœurs de processeurs, il y a quelques options. La première consiste à utiliser des interpréteurs python simultanément plusieurs, comme mentionné par d' autres. Une autre option est d'utiliser une autre implémentation de Python qui n'utilise un GIL. Les deux principales options sont Jython et IronPython .

Jython est écrit en Java, et est maintenant assez mature, bien que certaines incompatibilités demeurent. Par exemple, le framework web Django ne fonctionne pas encore parfaitement , mais se rapproche tout le temps. Jython est grande pour la sécurité de fil , qui sort mieux dans les benchmarks et a un message de effronté pour ceux qui veulent le GIL .

IronPython utilise le framework .NET et est écrit en C #. La compatibilité est atteint le stade où Django peut fonctionner sur IronPython (au moins comme une démo) et il y a des guides à l' aide de fils dans IronPython .

Créé 29/08/2008 à 16:17
source utilisateur

voix
1

Si vous voulez coder en python et obtenir un grand soutien de filetage, vous pouvez consulter IronPython ou Jython. Étant donné que le code python dans IronPython et Jython exécuté sur le CLR .NET et Java VM respectivement, ils bénéficient du grand soutien de filetage intégré dans ces bibliothèques. En plus de cela, IronPython ne pas le GIL, un problème qui empêche les discussions CPython de tirer pleinement parti des architectures multi-core.

Créé 23/02/2009 à 05:15
source utilisateur

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more