2016-03-25 22 views
0

Aşağıdaki kodda, message_response.get() yaptığımda, bu özel kodu senkronize eder. Şimdi bu aynayı yapabileceğim bir yol var mı? Sadece kodu bir komisyoncuya zorla. Ve kereviz işçisi görevle birlikte yapıldığında, sonucu müşteriye geri yazabilirim? Böyle bir kod olacak https://github.com/mher/tornado-celery , ama bunu tüketmemek:Python Tornado: Bunu asenkronize hale nasıl getirebilirim?

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) belgesine baktınız mı? –

+0

Görev kuyruğunu kullanmak istiyorum, hayır izlemek istiyorum. isteklerin var ve şeyler. Bunun için bir yolu var mı? –

cevap

2

Böyle bir şey denemelisiniz.

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)) 
İlgili konular