2016-03-25 70 views
0

在下面的代碼中,當我做message_response.get()時,它會使這個特定的代碼同步。現在有什麼辦法可以讓這個異步?只需將代碼推送給經紀人即可。一旦芹菜工人完成任務,我可以將結果寫回客戶端?Python龍捲風:我怎樣才能使這種異步?

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

你應該嘗試這樣的事:https://github.com/mher/tornado-celery 你有這樣的代碼,但我不運行它。

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