有时不调用Deferred(TwistedPython)

有时不调用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

我做了一个非常简单的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
始终被调用,读取超时消失


问题是“为什么?”

如果您的
延迟的
没有被调用,那么有人没有调用它。这可能是一个bug,也可能只是请求花费了很长时间。如果没有看到
mirror
方法的代码,就真的不可能猜测。如果您能够生成一个,这将大大有助于诊断您的问题。

在您的第一个示例中,是什么设置
self.request
?如下所示:def render\u POST(self,request):self.request=request