2012-06-08 4 views
0

Note: Mes études sur ce sujet font défaut, donc je peux faire des suppositions naïves.Utilisation du GIL en tant que pool de threads

Supposons que vous ayez une fonction exécutant des E/S bloquantes. Vous devez exécuter cette fonction n fois. Si vous deviez simplement générer n threads (en utilisant le module de thread) et les démarrer en même temps, cela fonctionnerait-il simplement en utilisant le GIL pour gérer les threads (basé sur les E/S) au lieu d'utiliser le module multiprocessing.pool pour gérer les sous-processus?

Répondre

4

Il est déconseillé d'utiliser un détail d'implémentation comme caractéristique principale de votre code. Le GIL est un détail d'implémentation de CPython, et n'existe pas dans other implementations.

Utilisez des objets conçus pour faire ce que vous voulez.

+1

Bien sûr. C'était plus une question académique qu'une question pratique – pdeuchler

+0

@pdeuchler N'hésitez pas à ne pas accepter ceci si vous vouliez une réponse théorique - je suis sûr que quelqu'un d'autre viendra vous parler de la viabilité de cette approche, mais je vais laisser tomber cela car c'est vraiment la réponse pratique à la question - qui est vraiment ce que SO est ici pour fournir. –

0

En quoi le GIL est-il pertinent ici? Qu'attendez-vous pour en sortir?

Vous pouvez générer n threads et les faire tous effectuer des E/S de blocage, sans GIL. Et si vous voulez "gérer" les threads, par exemple, rejoignez le tout pour que vous sachiez quand vous avez terminé, vous devez toujours le faire explicitement; le GIL n'aide pas.

+0

C'est vraiment plus un commentaire qu'une réponse. –

Questions connexes