2017-08-14 9 views
2

私はいくつかの内のAPIへのよりX要求をすることはできません(とりわけ)、レート制限されたAPI(すなわちと対話しなければならないフラスコのアプリケーションを持っています与えられた時間単位)。しかし、FlaskアプリケーションのAPIに対する要求は不均一であり、時にはAPIが許す範囲をはるかに超えて要求することがあり、時には数分または数時間の要求が一度にないことがあります。の管理は、レート制限するAPIをフラスコアプリケーションから呼び出す

APIへの呼び出しが非同期に発生することは問題ありません.Flaskアプリケーションをブロックして応答を待つ必要はありません。

私はこれをどのように実装するのがベストかと思います。

私は、最善のアプローチは、ある一定の間隔(APIの限界レートよりも低い)で呼び出しを行うFIFOキューを持つ別のプロセスを持つことだと考えています - 一種の漏れバケットアルゴリズムです。

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 

しかし、私はこれを設定するかどうかはわかりませんし、フラスコのアプリケーションは、キューと対話する必要があり(ちょうど彼らが起こるように新しい要求をプッシュ)。

セロリ(またはそれに類するもの)も過剰殺人のようです。

私はpython-daemonを探したり、マルチプロセッシングでサブプロセスを作成する必要がありますか?Queue?これに最も良い方法は何ですか?

答えて

1

私はセロリがあなたの問題に最適な解決策だと思います。これはまさにセロリのことであり、あなたのような問題を解決するためにPythonコミュニティによって広く採用されています。

&を設定することはそれほど難しくありませんので、余計ではありません。and you can read about it in Flasks documentation itselfです。

約30行のコードです。

+0

フェア 'ナフ。他のオプションの調査を続けながら再訪します。ありがとう。 – PartialOrder

関連する問題