1

私はツイストにかなり慣れていません。レート制限のあるサーバーにクエリを実行する 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 つの問題は、睡眠中にこのタイムアウトに達する可能性があり、すべての要求がキャンセルされることです。

私が十分に正確であることを願っています。前もって感謝します。

ジェッポ

4

2 に答える 2