2017-09-14 9 views
2

我用的是uwsgi開始我燒瓶服務器,其中有15名工人,我想每一個原料藥的通話時間,並返回結果,如:瓶get請求通話時間爲每個API

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

我添加before_request手柄應用:

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

而且我寫的API來獲取計數值。 但是,我發現每次值不增加,因爲有多個工人,每次我只有一個工人的通話時間

所以,我的問題是如何收集所有的請求通話時間Flask的員工?

+0

我不需要任何軟件包,只是代碼解決方案,謝謝 –

+0

有一個全局變量'g'來管理應用程序中的所有共享變量。您可以在'before_request'裝飾函數中使用默認的'dict'來保存名稱(url)和值(調用URL的次數)。 我不確定線程​​安全性。但請確保多個工作人員不要同時更改網址字典的值。 –

+0

燒瓶內部沒有簡單的解決方案,但我想你可以做日誌記錄API調用時間,並做日誌的統計數據,這對我來說更容易。 – georgexsh

回答

0

您不能跟蹤這樣的櫃檯對面工人,你會遇到這樣的問題:

  • 假設工人在單獨的進程正在運行,則需要調和你的櫃檯
  • 假設工人正在運行在線程中,您需要確保您的計數器是線程安全的。

在註釋部分,建議使用g對象,這將無法正常工作g只佔全球的請求。每次請求後,g被拆除。

實現計數器的正確方法是使用第三方數據存儲。數據庫可以完成這項工作(可以在事務中處理併發),但建議使用Redis或Memcached之類的緩存服務。