2010-05-17 3 views
5

Dans les environnements asynchrones, threading.local n'est plus garanti d'être contextuel, car plusieurs contextes peuvent coexister dans un même thread. La plupart des frameworks asynchrones (gevent, eventlet) fournissent une fonctionnalité get_current_context() pour identifier le contexte actuel. Certains offrent un moyen de modifier le singe threading.local de sorte qu'il soit local pour les «greenthreads» ou d'autres contextes spécifiques au framework. Je ne peux pas trouver une telle fonctionnalité dans la documentation tordue. Comment puis-je faire cela?threading.local équivalent pour twisted.web?

Répondre

3

Je suppose que vous voulez cette API afin d'enregistrer et de récupérer l'état par requête. Si non, alors vous pourriez vouloir clarifier votre question. Twisted Web n'offre aucune API le long de ces lignes. Puisque vous contrôlez la totalité de la durée de vie de la requête, possible vous permet de stocker tout état par requête vous-même: sur Resource instances, dans les sections locales, dans les arguments des rappels, etc. Une fonction get_current_context est une sorte de équivalent multithread d'utiliser des globals pour garder une trace de votre état. En y réfléchissant de cette façon, j'espère que c'est un peu plus évident pourquoi vous pourriez envisager d'autres solutions.