我有一个简单的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()发布于 2017-12-13 16:19:56
您可以使用反应堆的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')https://stackoverflow.com/questions/47797201
复制相似问题