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