2010-05-17 8 views
5

In asynchronen Umgebungen ist threading.local nicht garantiert, dass es sich um einen kontextlokalen Kontext handelt, da mehrere Kontexte innerhalb eines einzelnen Threads koexistieren können. Die meisten asynchronen Frameworks (gevent, eventlet) stellen eine get_current_context() Funktionalität bereit, um den aktuellen Kontext zu identifizieren. Einige bieten eine Möglichkeit zum Monkey-Patch threading.local, so dass es lokal für 'Greenthreads' oder andere Framework-spezifische Kontexte ist. Ich kann eine solche Funktionalität in der verdrehten Dokumentation nicht finden. Wie mache ich das?threading.local Entsprechung für twisted.web?

Antwort

3

Ich gehe davon aus, dass Sie diese API verwenden möchten, um pro-Request-Status zu speichern und abzurufen. Wenn nicht, dann möchten Sie vielleicht Ihre Frage klären.

Twisted Web bietet keine API in diesen Bereichen. Da Sie für die gesamte Lebensdauer der Anfrage die Kontrolle haben, ist es möglich für Sie, jede per-Anfrage Staat selbst zu speichern: auf Resource Instanzen, in den Einheimischen, in Argumente zu Rückrufen, etc. Eine get_current_context Funktion ist eine Art der Multithread-Äquivalent zur Verwendung von Globals, um Ihren Status zu verfolgen. Wenn Sie so darüber nachdenken, ist es hoffentlich ein wenig offensichtlicher, warum Sie alternative Lösungen in Erwägung ziehen sollten.

Verwandte Themen