【发布时间】:2013-01-21 07:13:16
【问题描述】:
我已经完成了一个非常简单的网络服务,如下所示:
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() 返回一个 deferred,它在 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 总是被调用并且读取超时消失了。
问题是“为什么?”
【问题讨论】:
-
在您的第一个示例中,
self.request的设置是什么? -
像这样: def render_POST(self, request): self.request = request