Python 管理来自Flask应用程序的速率受限API调用

Python 管理来自Flask应用程序的速率受限API调用,python,flask,queue,python-multiprocessing,Python,Flask,Queue,Python Multiprocessing,我有一个Flask应用程序,它(除其他外)必须与速率受限的API交互(即,在给定的时间单位内不能向API发出超过x个请求)。然而,Flask应用程序对API的需求是不均衡的——有时需求远远超出API允许的范围,有时一次不需要几分钟或几小时 对API的调用可以异步进行——Flask应用程序无需阻塞并等待响应 所以我想知道如何最好地实现这一点 我认为最好的方法是使用一个单独的进程和一个FIFO队列,它以固定的间隔(小于API的限制速率)进行调用——有点像漏桶算法 from multiprocessi

我有一个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创建子进程?最好的方法是什么?

我认为芹菜是解决你问题的最好办法。这正是芹菜所做的,python社区高度采用它来解决像您这样的问题

这并不过分,因为设置和配置并不难


大约有30行代码:)

Fair'nuff。将重新访问,同时继续调查其他选项。谢谢