私はツイストにかなり慣れていません。レート制限のあるサーバーにクエリを実行する HTTP クライアントを持っています。この制限に達すると、サーバーは HTTP 204 で応答するため、応答を処理しているときに、おそらく厄介なことをしています。このような:
def handleResponse(r, ip):
if r.code == 204:
print 'Got 204, sleeping'
time.sleep(120)
return None
else:
jsonmap[ip] = ''
whenFinished = twisted.internet.defer.Deferred()
r.deliverBody(PrinterClient(whenFinished, ip))
return whenFinished
すべてのタスクを一時停止したいので、これを行っています。
次に、同じ実行で後で204にヒットしたタスクを再実行するか(可能かどうかはわかりません)、エラーをログに記録してから別の実行で再実行します。プログラムの。発生する可能性のある別の問題は、サーバーからの応答がない場合に、事前に定義された時間 (以下のコードを参照) の後に遅延をキャンセルするために、接続にタイムアウトを設定したことです。
timeoutCall = reactor.callLater(60, d.cancel)
def completed(passthrough):
if timeoutCall.active():
timeoutCall.cancel()
return passthrough
d.addCallback(handleResponse, ip)
d.addErrback(handleError, ip)
d.addBoth(completed)
私が遭遇する可能性のあるもう 1 つの問題は、睡眠中にこのタイムアウトに達する可能性があり、すべての要求がキャンセルされることです。
私が十分に正確であることを願っています。前もって感謝します。
ジェッポ