扭曲使功能无阻塞

时间:2017-01-05 09:19:40

标签: python asynchronous twisted

我正在使用twisted来制作一个async网络服务器(以了解甚至基于异步编程背后的想法)。考虑这种情况,服务器在某个端点上获得GET请求时,ex http:localhost:8000/api/v1/calc_fact?num=1000计算因子1000并返回结果。这部分很容易搞定。我也知道延期api。我如何定义我的函数calc_factorial(),以便它返回一个延迟,整体结果是非bloccking。

1 个答案:

答案 0 :(得分:1)

我做了类似的事情。

在您的资源中,您需要返回server.NOT_DONE_YET并添加calc_factorial延迟回调,如下所示

def render_GET(self, request):
    d = Deferred()
    reactor.callLater(1, d.callback, None)
    d.addCallback(self.calc_factorial, request)
    d.addErrback(rror_handler, request)
    return server.NOT_DONE_YET

然后在calc_factorial中写入请求:

def calc_factorial(self, request):
    # something something
    request.write("factorial calc done")
    request.finish()

一旦你写完请求,它就会触发NOT_DONE_YET