有时不调用Deferred(TwistedPython)
我做了一个非常简单的web服务,如下所示:有时不调用Deferred(TwistedPython),python,twisted,deferred,Python,Twisted,Deferred,我做了一个非常简单的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.sav
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
始终被调用,读取超时消失
问题是“为什么?”如果您的
延迟的没有被调用,那么有人没有调用它。这可能是一个bug,也可能只是请求花费了很长时间。如果没有看到mirror
方法的代码,就真的不可能猜测。如果您能够生成一个,这将大大有助于诊断您的问题。在您的第一个示例中,是什么设置self.request
?如下所示:def render\u POST(self,request):self.request=request