我做了一个非常简单的网络服务:
class UploadResource(Resource):
def onSuccess(self, result):
self.request.write("OK")
def onError(self, result):
self.request.write("Error")
def render_POST(self, request):
request.data.save_to_disk()
d = request.mirror("http://mirror_replica/Upload")
d.addCallbacks(self.onSuccess, self.onError)
return server.NOT_DONE_YET
方法request.mirror()
返回在http客户端请求完成将数据发送到同一Web服务的另一个副本后触发的延迟
当我在一些成功的请求之后对一个副本运行简单的压力测试/上传方法时,我得到了一个读取超时客户端异常。 对于1000个成功的请求,我有一个读取超时异常。 经过一些调试后,我发现有时 onSuccess回调从未调用,并且读取超时不是由重负载引起的。
所以,我已经重写了类代码:
class UploadResource(Resource):
def render_POST(self, request):
request.data.save_to_disk()
d = request.mirror("http://mirror_replica/Upload")
def onSuccess(result):
request.write("OK")
def onError(self, result):
request.write("Error")
d.addCallbacks(onSuccess, onError)
return server.NOT_DONE_YET
现在 onSuccessCallback
总是被称为,并且读取超时已经消失。
问题是“为什么?”
答案 0 :(得分:1)
如果您的Deferred
未被呼叫,则有人无法呼叫它。这可能是一个错误,或者可能只是请求需要很长时间。如果没有看到mirror
方法的代码,甚至无法猜测。如果你能够产生complete, runnable example,那么在诊断你的问题方面会有很长的路要走。