Avant toute chose, quel problème de programmation essayez-vous de résoudre? Le GIL est-il devenu un goulot d'étranglement? (Si vous n'êtes pas sûr, ce n'est probablement pas le cas.)
Sans le savoir, vous risquez de devoir chercher un clou adapté à votre marteau plutôt que l'inverse.
Si vous avez vraiment, vraiment savoir que le GIL est devenu un goulot d'étranglement, et que vous avez besoin de croquer des nombres sur plusieurs processeurs, alors que vous voulez examiner:
- Si vous avez connu des sections critiques CPU, compilez-les avec des déclarations de type C en utilisant Pyrex/Cython, si vous le pouvez. Cela les rendra d'abord beaucoup plus efficaces que l'interprétation Python bytecode, et en prime, vous permettra de libérer le GIL autour des sections qui n'en ont pas besoin. (Morale: transformez vos ânes en chevaux de course avant d'essayer de les paralléliser.)
- Cela devrait aller de soi, mais si vous utilisez des modules d'extension gourmands en ressources, assurez-vous qu'ils ne libèrent pas déjà le GIL pour vous. Pour presque tout le reste, utilisez le module
multiprocessing
intégré. Cela vous donne à peu près la même API et les mêmes avantages que threading
, mais vous offre vrai niveau de concurrence au niveau du processus: entre autres choses, cela vous permet d'exécuter facilement votre code CPU sur plusieurs machines de concert, ce qui est essentiel si votre le problème devient gros.
Je n'ai jamais vraiment compris où est la ligne "subjective", mais ce site a pour règle de déplacer ces sujets vers http://programmers.stackexchange.com/ ou de cocher la case "Community Wiki" . Je pense que cette question est qualifiée de sujet; vous pouvez "CW-ify" en éditant la question et en cochant la case. – intuited
Je n'ai jamais vu clairement la ligne "subjective" non plus, mais en faisant de cette question un CW avant que la police proche trouve que c'est probablement une bonne idée. – Niki
Pourquoi avez-vous décidé que les threads (et non les processus) sont la meilleure façon de résoudre vos besoins de simultanéité? –