3

モジュールスコープで作成した変数(クラスまたは関数が定義される前のファイルの先頭など)が時間の経過とともに異なる動作をするという奇妙なエラーが発生しています。この変数(それを呼びましょう_cache)は私のクラスに引き込まれます:

_cache = None

class XMLGenerator(object):
    global _cache

    def __init__(self, parms):
        if _cache is None:
             _cache = expensive_query(parms)

このキャッシュの結果は、Webサービスに着信するリクエストのコンテキストによって異なる可能性がありますが、同じサービスへの呼び出し間で結果のXML出力に異なる動作が見られます。サーバーを再起動でき、すべてが素晴らしいですが、最終的に、異常な動作が再び始まります。

uWSGIはどういうわけかリクエスト間の状態を保持していますか?

4

2 に答える 2

3

私は戻って、ここで何が起こったのかを説明したかった。実際、グローバル変数は、uWSGIの同じサービスへのリクエスト間で「更新」されません。したがって、モジュールレベルの変数を作成すると、複数のリクエスト間で状態が保持されます。これは明らかに、私が意図したものではありませんでした。そのため、異なる呼び出しの間でキャッシングオブジェクトをに渡すことになりましたXMLGenerator。これにより、APIは非常に醜くなりましたが、モジュールレベルの変数の問題は回避されました。

于 2013-12-28T04:36:31.950 に答える
1

複数のワーカーでこれを行う場合は、おそらくuwsigのCachingFrameworkを使用する必要があります。

http://projects.unbit.it/uwsgi/wiki/CachingFramework

そうでなければ、_cacheはワーカー間で異なる可能性があると思います。

また、uwsgi --processes 1を使用してテストし、問題が解決するかどうかを確認することもできます。

于 2012-08-24T18:09:08.290 に答える