2017-08-14 59 views
2

我具有長頸瓶的應用程序(除其他事項外)必須與速率限制API(互動,不能使內約有超過X請求的API給定單位時間)。然而,Flask應用程序對API的需求並不均衡 - 有時需求遠遠超過了API所允許的範圍,有時一次不需要幾分鐘或幾小時。管理調用從瓶應用速率限制API

它的罰款對API的調用異步發生 - 沒有必要爲瓶應用程序阻止和等待響應。

所以我不知道如何才能最好地實現這一點。

我想最好的辦法是有一個單獨的進程與FIFO隊列,這使得在一些固定的時間間隔調用(小於限速爲API) - 有點像漏桶算法。

from multiprocessing import Queue 

q = Queue() 

... 

# This runs all the time 
while True: 
    sleep(SOME_TIME) 
    if q.empty() == False: 
     # pop data and use make the API call 

但我不知道如何設置它並讓Flask應用程序與隊列交互(只是在發生時推送新的請求)。

看來還芹菜(或類似)是矯枉過正。

我應該尋找到蟒蛇守護或者創建擁有multiprocessing.Queue一個子進程?最好的辦法是什麼?

回答

1

我認爲,芹菜是你的問題的最佳解決方案。這正是芹菜所做的,它被python社區高度用來解決像你這樣的問題。

這不是一個矯枉過正,因爲它不是很難設置&配置,and you can read about it in Flasks documentation itself

這就是約30行代碼:)

+0

公平'nuff。將繼續調查其他選項的同時重新審視。謝謝。 – PartialOrder