2017-08-14 61 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