我对twisted很陌生,我有一个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的任务(不知道是否可能),要么记录错误,然后在程序的另一个执行中重新运行它们。另一个可能引起的问题是,我在连接上设置了一个超时,以便在服务器没有响应的情况下,在预定义的时间段(参见下面的代码)后取消延迟的连接
^{pr2}$我可能遇到的另一个问题是,如果我在睡觉,我可能会超时,我所有的请求都将被取消。
我希望我已经足够精确了。 提前谢谢你。
杰波
不要在任何基于Twisted的代码中使用
time.sleep(20)
。这违反了您可能使用的任何其他基于Twisted的代码的基本假设。在相反,如果想延迟某件事N秒,请使用
reactor.callLater(N, someFunction)
。在一旦您从程序中删除了
sleep
调用,那么仅仅因为您停止了reactor处理事件而发生的无关超时问题就会消失。在相关问题 更多 >
编程相关推荐