質問

djangoアプリの権利に取り組んでおり、サーバーとしてcherrypyを使用しています。 Cherrypyは、ページビューごとに新しいスレッドを作成します。これらのすべてのスレッド(djangoと通信するスレッド)に、それらのいずれかからアクセスできるようにしたいと思います。より具体的には、これらのスレッドのいずれからでも、これらのスレッドのthread_dataにアクセスできるようにしたいと思います。これは可能ですか?もしそうなら、どうすればいいですか?

役に立ちましたか?

解決

CherryPyのwsgiserverは、リクエストごとに新しいスレッドを作成するわけではありません。プールを使用します。これらのワーカースレッドはそれぞれthreading.Threadのサブクラスであるため、すべてのスレッドはthreading.enumerate()を介してアクセスできる必要があります。

ただし、cherrypy.thread_dataについて具体的に説明している場合は、別のスレッド:threading.localです。 Pythonの最新バージョンを使用している場合、Cでコーディングされたすべてのものは、(おそらく)Pythonからクロススレッドでアクセスできません。本当に必要な場合は 本当に自分が何をしているのかを知っている場合、最良の方法は、通常、これらはthread_data構造に挿入されます。これらのグローバルコンテナーのキーとしてweakrefsを使用する辞書をお勧めします。接続プールにそれらを使用するPython ORMが十分にあり(たとえば、独自のGeniusqlを参照)、それらをかなり簡単に実装する方法を学ぶことができます。

他のヒント

このような質問に対する私の最初の回答は、その方法を説明することではなく、これを進める前に本当に再考する必要があることを強調することです。私は通常、マルチプロセスまたは非同期のソリューションを支持して、スレッド化されたWebサーバーを避けます。明示的なスレッド間通信をミックスに追加しても、それらの不安が高まるだけです。

このような質問がされると、より深い目標があります。スレッド間通信が解決すると思われるものは、実際には他の安全な方法で解決できると思います。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top