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

Managing calls to rate-limited API from Flask application

我有一个 Flask 应用程序(除其他外)必须与限速 API( 交互,不能超过 x 在给定的时间单位内向 API 发出请求)。然而,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 应用程序与队列交互(只是在新请求出现时推送它们)。

Celery(或类似的)似乎也太过分了。

我应该查看 python-daemon 还是使用 multiprocessing.Queue 创建子进程?解决此问题的最佳方法是什么?

我认为芹菜是解决您问题的最佳方案。这正是 celery 所做的,它被 python 社区广泛采用来解决像您这样的问题。

这不是矫枉过正,因为它并不难设置和配置,and you can read about it in Flasks documentation itself

那是大约 30 行代码:)