我有一个 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/