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

Twisted web server: execute a deferred action after sending response

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

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()

可以使用反应堆的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')