我有一个Flask应用程序,它必须与速率受限的API交互(也就是说,在给定的时间单位内不能向API发出超过x的请求)。然而,Flask应用程序对API的需求是不均衡的--有时需求远远超过API所允许的,有时一次不需要几分钟或几个小时。
对API的调用可以异步进行--没有必要让Flask应用程序阻塞和等待响应。
因此,我想知道如何最好地实现这一点。
我认为最好的方法是有一个独立的进程,其中有一个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应用程序与队列交互(只是在出现新请求时将其推送)。
芹菜(或类似的)似乎也是杀伤力过大。
我应该研究python还是使用multiprocessing.Queue创建一个子进程?最好的方法是什么?
发布于 2017-08-14 17:49:18
我认为芹菜是解决你问题的最好方法。这正是芹菜所做的事情,并且被python社区高度采用来解决像您这样的问题。
这并不是过火,因为它的设置和配置并不难,你可以在烧瓶文档中读到它。。
大约有30行代码:)
https://stackoverflow.com/questions/45679210
复制相似问题