我已经完成了一个非常简单的 Web 服务,如下所示:
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 服务的另一个副本
当我在一些成功请求后对一个副本运行 /Upload 方法的简单压力测试时,我得到了读取超时客户端异常。对于 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
总是被调用并且读取超时消失了。
问题是“为什么?”