Frage

Ich arbeite an einem django app richtig, und ich bin mit cherrypy als Server. CherryPy erstellt einen neuen Thread für jede Seite Ansicht. Ich möchte in der Lage sein, all diese Fäden für den Zugriff (Threads verantwortlich django im Gespräch) aus einer von ihnen. Genauer gesagt würde Ich mag die thread_data für jeden dieser Fäden aus einer von ihnen den Zugriff zu können. Ist das möglich? Wenn ja, wie mache ich das?

War es hilfreich?

Lösung

CherryPy des wsgiserver keinen neuen Thread für jede Anforderung erstellen - es wird ein Pool. Jeder dieser Arbeitsthreads ist eine Unterklasse von threading.Thread, so dass alle von ihnen sollten über threading.enumerate () zugänglich sein.

Allerdings, wenn Sie speziell über cherrypy.thread_data reden, das ist etwas anderes: ein threading.local. Wenn Sie eine aktuelle Version von Python verwenden, dann alles, was in C codiert und Sie (wahrscheinlich zu Recht) nicht über Cross-Thread Zugriff darauf von Python. Wenn Sie wirklich müssen sie und wirklich wissen, was Sie tun, ist die beste Technik in der Regel einen zusätzlichen Verweis auf solche Dinge in einem globalen Behälter zur gleichen Zeit zu halten, die sie werden in die thread_data Struktur eingefügt. Ich empfehle dicts mit weakrefs als Schlüssel für die globalen Container - es genug Python ORM ist, die sie für Verbindungspools verwenden (meinen eigenen Geniusql, zum Beispiel sehen), dass Sie in der Lage zu lernen sollten, wie sie umzusetzen ziemlich leicht

Andere Tipps

Meine erste Antwort auf eine Frage wie diese ist nicht zu sagen, wie es zu tun, aber zu betonen, dass Sie wirklich, bevor er nach vorn mit dieser überdenken sollen. Ich scheue normalerweise weg von Gewinden Web-Server, für Multi-Prozess oder asynchroner Lösungen. Hinzufügen von expliziter inter-thread Kommunikation der Mischung erhöht nur die Ängste.

Wenn eine Frage wie diese gefragt wird, gibt es ein tieferes Ziel. Ich vermute, dass das, was Sie inter-thread Kommunikation denken lösen würde, kann tatsächlich in einem anderen, sichereren Weg gelöst werden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top