2011-03-11 68 views

回答

-1

不,它不容易「開箱即用」。你所指的是「火和忘記」。即使你使用一個線程池去尋找請求,該線程池也將屬於屬於Tornado的主python進程。

最好的方法是消息隊列。像胡蘿蔔一樣。這樣,假設你有一個用戶可以執行的頁面來開始生成一個巨大的報告,你可以在消息隊列中啓動它,然後完成Tornado請求以及一些AJAX魔術和其他技巧(超出Tornado範圍),你可以坐下來等待消息隊列完成它的工作(技術上可能發生在不同物理位置的分佈式服務器上)。

+0

這是非常容易的;我會添加一個答案。 –

5

ioloop.add_callback,Tornado將在下一次IOLoop迭代中執行回調。

0

不良建議警告:您可以使用多處理。

http://docs.python.org/library/multiprocessing.html

要小心,您關閉所有的數據庫連接(在催生代碼),做當它正常完成無子的請求任何其他龍捲風可能會做。其他答案聽起來更好。但是,你可以做到這一點。不要這樣做。

9

這是非常簡單的:

class Handler(tornado.web.RequestHandler): 
    def get(self): 
     self.write('response') 
     self.finish() # Connection is now closed 
     foo() 
+0

這會阻止io循環嗎? – raylu

+2

是的,如果foo()阻止IO。不,如果foo()沒有。 經驗法則:如果foo()使用IOStream,那麼它是非阻塞的。如果它使用沒有IOStream的套接字,那麼它將被阻塞。 –

相關問題