2017-12-13 10 views
0

を送信した後に遅延アクションを実行し、私は以下のように定義単純なWebサービスがあります。このサービスツイスト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を送信します。

Fine。

しかし、要求が処理されてから1分後に延期アクションを実行する必要があります。

どうすればよいですか?あなたはまた、その後deferred_action関数に渡される以上の引数を追加することができます

reactor.callLater(60.0, deferred_action) 

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

'reactor.callLater(60.0、deferred_action) ' –

+0

これです!とても簡単!それは受け入れられた答えになることができます。 – alexpirine

答えて

1

あなたは原子炉のcallLater()方法を使用することができます。

私はこのような何かを意味します。もちろん、それを受け入れる必要があります。

def deferred_action(value): 
    print(value) 

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