2013-12-23 2 views
1

Я довольно новичок в скрученном, у меня есть HTTP-клиент, который запрашивает сервер с ограничениями по скорости, когда я нажимаю этот предел, на который сервер отвечает HTTP 204, поэтому, когда я обрабатываю ответ я делаю, вероятно, что-то противное, как это:Twisted Python pause/postpone реактор

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) 

Другая проблема, с которой я могу столкнуться, состоит в том, что если я сплю, я могу нанести этот таймаут, и все мои запросы будут отменены.

Надеюсь, что я был достаточно точным. Спасибо заранее.

Jeppo

ответ

3

Не используйте time.sleep(20) в любом Twisted основе кода. Это нарушает основные предположения, что любой другой код Twisted, который вы, возможно, используете, делает.

Вместо этого, если вы хотите что-то отложить на N секунд, используйте reactor.callLater(N, someFunction).

Как только вы удалите sleep звонки из вашей программы, проблема несвязанных тайм-аутов, которые попадают только из-за того, что вы остановили реактор от обработки событий, исчезнет.

Смежные вопросы