python - 管理 Flask 应用程序对限速 API 的调用

标签 python flask queue python-multiprocessing

我有一个 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 应用程序与队列交互(只是在新请求出现时推送它们)。

Celery(或类似的)似乎也有点矫枉过正。

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

最佳答案

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

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

那是大约 30 行代码:)

关于python - 管理 Flask 应用程序对限速 API 的调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45679210/

相关文章:

python - 将 Python 文档字符串从重组文本转换为 Google 样式的简单方法?

python - 一个非常简单的正则表达式的问题

python - sublime 3 jinja2荧光笔的使用方法

javascript - 外部 JS/jQuery 文件正在加载但未执行

Laravel队列速率限制或限制

python - 接收流时中断python grpc客户端

javascript - 照片库适用于 gae appspot,但不适用于 127.0.0.1

Javascript window.onload 不显示带有 Chart.js 和 Flask 的图表

c - 队列(fifo)的实现

python - 如何使用 python、Flask 和命令行传递 URL 参数