に移行したいのですがndb
、非同期urlfetch
タスクレットを使用するかどうか迷っています。ドキュメントがやや貧弱であるため、それがどのように機能するかを完全に理解しているかどうかはわかりませんが、この特定のユースケースでは非常に有望なようです.
現在、私はこのように非同期を使用urlfetch
しています。実際のスレッド化や並列コードにはほど遠いですが、シーケンシャル リクエストと比較すると、パフォーマンスは大幅に向上しています。
def http_get(url):
rpc = urlfetch.create_rpc(deadline=3)
urlfetch.make_fetch_call(rpc,url)
return rpc
rpcs = []
urls = [...] # hundreds of urls
while rpcs < 10:
rpcs.append(http_get(urls.pop()))
while rpcs:
rpc = rpcs.pop(0)
result = rpc.get_result()
if result.status_code == 200:
# append another item to rpcs
# process result
else:
# re-append same item to rpcs
このコードは単純化されていることに注意してください。実際のコードは例外をキャッチし、追加のチェックを行い、同じ項目を数回追加しようとします。この場合は違いはありません。
結果の処理には操作が含まれていないことを付け加えておきますdb
。