Twisted Web服务器:发送响应后执行延迟操作

时间:2017-12-13 15:52:18

标签: python twisted

我有一个简单的Web服务定义为:

from twisted.internet import endpoints
from twisted.internet import reactor
from twisted.web import resource
from twisted.web import server

class TestService(resource.Resource):
    def render_GET(self, request):
        return "ok"

ts = TestService()
endpoints.serverFromString(reactor, "tcp:{}".format(8080)).listen(server.Site(ts))
reactor.run()

此服务始终在每个GET请求上发送 ok

精细。

但是我需要在处理完请求后1分钟执行延迟操作。

我该怎么做?

我的意思是这样的:

from twisted.internet import endpoints
from twisted.internet import reactor
from twisted.web import resource
from twisted.web import server

def deferred_action():
    time.sleep(60)
    # do some action...
    print("action completed")

class TestService(resource.Resource):
    def render_GET(self, request):
        defer(deferred_action) # how do I do this?
        return "ok"

ts = TestService()
endpoints.serverFromString(reactor, "tcp:{}".format(8080)).listen(server.Site(ts))
reactor.run()

1 个答案:

答案 0 :(得分:1)

您可以使用反应堆的callLater()方法:

reactor.callLater(60.0, deferred_action)

您还可以添加更多参数,然后将这些参数传递到deferred_action函数中。当然它需要接受它们。

def deferred_action(value):
    print(value)

class TestService(resource.Resource):
    def render_GET(self, request):
        reactor.callLater(60.0, deferred_action, 'some value')