Threading.local эквивалент для Twisted.web? - PullRequest
5 голосов
/ 17 мая 2010

В асинхронных средах threading.local больше не гарантированно является локальным контекстом, поскольку в одном потоке могут сосуществовать несколько контекстов. Большинство асинхронных сред (gevent, eventlet) предоставляют функциональность get_current_context() для идентификации текущего контекста. Некоторые предлагают способ обезьяньего патча threading.local, чтобы он был локальным по отношению к «зеленым нитям» или другим специфичным для фреймворка контекстам. Я не могу найти такую ​​функциональность в витой документации. Как мне это сделать?

1 Ответ

3 голосов
/ 17 мая 2010

Я предполагаю, что вы хотите этот API для сохранения и получения состояния для каждого запроса. Если нет, то, возможно, вы захотите уточнить свой вопрос.

Twisted Web не предлагает никаких API в этом направлении. Так как вы полностью контролируете время существования запроса, возможно для вас, чтобы хранить любое состояние для запроса самостоятельно: в Resource экземплярах, в локальных объектах, в аргументах для обратных вызовов и т. Д. Функция get_current_context является своего рода многопоточным эквивалентом использования глобальных переменных для отслеживания вашего состояния. Когда вы думаете об этом таким образом, мы надеемся, что становится более очевидным, почему вы можете рассмотреть альтернативные решения.

...