2017-09-14 5 views
2

のための要求の呼び出し回数を取得:フラスコは、私は15人の労働者を持っている私のフラスコサーバを起動するためにuwsgiを使用して、私は、各APIの呼び出し回数を取得したい、とのような結果を返す各API

{ 
    "api/students": 10, 
    "api/teachers": 20, 
    ... 
} 

は私がアプリをbefore_requestハンドルを追加します。

@app.before_request 
def before_request_handler(): 
    # here to do statistics 
    # count += 1 

そして私は、カウント値を取得するためのAPIを記述します。 しかし、私は値が増えないたびに、複数の労働者がいるので、1人の労働者の通話時間を得るたびに

これは私の質問です。フラスコの労働者?あなたのような問題に実行されますとあなたは労働者の間でこのようなカウンターを追跡することはできません

+0

私はパッケージを必要としません。解決策はありません。 –

+0

アプリケーション全体に共有変数を管理するためのグローバル変数 'g'があります。 'before_request'装飾された関数でname(url)とvalue(URLが呼び出された回数)を保持するデフォルトの' dict'を使うことができます。 まだスレッドの安全性についてはわかりません。しかし、複数の労働者が同じ時間にURL dictの値を変更しないように注意してください。 –

+0

フラスコの中にシンプルなソリューションはありませんが、API呼び出し時間を記録してログ上の統計を行うだけで、はるかに簡単です。 – georgexsh

答えて

0

:労働者が別のプロセスで実行されている、あなたが労働者を想定すると、あなたのカウンター

  • を調整する必要がありますと仮定し

    • が実行されていますスレッドでは、カウンタがスレッドセーフであることを確認する必要があります。

    gオブジェクトを使用することをお勧めします。このセクションでは、gはリクエストごとにグローバルなので動作しません。各リクエストの後、gが破棄されます。

    カウンタを実装する正しい方法は、サードパーティのデータストアを使用することです。データベースはジョブを実行できます(並行処理はトランザクションで処理できます)が、RedisやMemcachedのようなキャッシングサービスを使用することをお勧めします。

  • 関連する問題