我有一个简单的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()
答案 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')