2016-03-25 22 views
0

以下のコードでは、message_response.get()を実行すると、この特定のコードを同期させます。今私はこれを非同期にする方法はありますか?コードをブローカーにプッシュするだけです。セロリの作業者が作業を終えたら、その結果をクライアントに書き戻すことができますか?あなたはこのようなコードがあるでしょうhttps://github.com/mher/tornado-celery が、私はそれを実行しない:Python Tornado:これを非同期にするにはどうすればよいですか?

import tornado.websocket 
from celery_main import do_something_celery_task 


class HomePageRequestHandler(tornado.websocket.WebSocketHandler): 
    def on_message(self, message): 
     message_response = do_something_celery_task.apply_async((message,)) 
     # How can this be a non blocking call? 
     self.write_message(message_response.get()) 

    def open(self): 
     pass 
+0

[coroutines](http://www.tornadoweb.org/en/stable/gen.html)のドキュメントを見ましたか? –

+0

私はタスクキューイングを使用したい、いいえを監視したいと思います。リクエストはそこにあり、大事です。それには道がありますか? –

答えて

2

あなたはこのような何かを試してみてください。

from tornado.websocket import WebSocketHandler 

class WebSocketBase(WebSocketHandler): 
    @gen.coroutine 
    def on_message(self, message): 
     response = yield gen.Task(tasks.sleep.apply_async, args=[3]) 
     self.write_message(str(response.result)) 
関連する問題