Question

Je travaille bien sur une application Django et j'utilise cherrypy comme serveur. Cherrypy crée un nouveau fil pour chaque affichage de page. J'aimerais pouvoir accéder à tous ces fils (fils responsables de la discussion avec django) à partir de n'importe lequel d'entre eux. Plus précisément, j'aimerais pouvoir accéder aux thread_data de chacun de ces threads à partir de n'importe lequel d'entre eux. Est-ce possible? Si oui, comment puis-je le faire?

Était-ce utile?

La solution

wsgiserver de CherryPy ne crée pas de nouveau thread pour chaque requête, il utilise un pool. Chacun de ces threads de travail est une sous-classe de threading.Thread, ils doivent donc tous être accessibles via threading.enumerate ().

Toutefois, si vous parlez spécifiquement de cherrypy.thread_data, c’est autre chose: un threading.local. Si vous utilisez une version récente de Python, alors tout ce qui est codé en C et vous (probablement à juste titre) ne disposez pas d'un accès multithread depuis Python. Si vous en avez vraiment besoin et si vous savez ce que vous faites, la meilleure technique consiste généralement à coller une référence supplémentaire à ces éléments dans un conteneur global en même temps. ils sont insérés dans la structure thread_data. Je recommande les dicts avec des références faibles comme clés pour ces conteneurs globaux - il y a suffisamment d'ORM Python qui les utilisent pour les pools de connexions (voir mon propre Geniusql, par exemple) pour pouvoir apprendre à les implémenter assez facilement.

Autres conseils

Ma première réponse à une question comme celle-ci n’est pas de vous dire comment le faire, mais de souligner que vous devez vraiment reconsidérer votre décision avant de poursuivre. Je crains normalement les serveurs Web filetés, en faveur des solutions multi-processus ou asynchrones. L'ajout d'une communication inter-thread explicite au mix ne fait qu'augmenter ces craintes.

Lorsqu'une question de ce type est posée, l'objectif est plus profond. Je pense que ce que vous pensez que la communication inter-thread résoudrait pourrait effectivement être résolu d’une autre manière plus sûre.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top