有时不调用Deferred(twisted python)

2024-05-14 01:22:23 发布

您现在位置:Python中文网/ 问答频道 /正文

我做了一个非常简单的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方法的压力测试时,我得到了一个read timeout客户端异常。 对于1000个成功的请求,我得到一个读取超时异常。 经过一些调试后,我发现有时onSuccess回调从未调用过,读超时也不是由重载引起的。在

因此,我将类代码重写为:

^{pr2}$

{/timeout现在总是被称为。在

问题是“为什么?”


Tags: 方法selfwebhttp客户端requestmirrordef
1条回答
网友
1楼 · 发布于 2024-05-14 01:22:23

如果您的Deferred没有被调用,则有人无法调用它。这可能是一个bug,也可能只是请求花费了很长时间。如果看不到mirror方法的代码,就根本无法猜测。{如果你能诊断出一个很长的问题。在

相关问题 更多 >