在龍捲風請求處理程序中,如果我必須調用不影響返回給用戶的函數的函數foo(),則首先將結果返回給用戶,然後調用foo ()。是否有可能在龍捲風(或與第三方軟件包)中輕鬆完成此操作?返回後請求處理程序中的龍捲風處理數據
回答
不,它不容易「開箱即用」。你所指的是「火和忘記」。即使你使用一個線程池去尋找請求,該線程池也將屬於屬於Tornado的主python進程。
最好的方法是消息隊列。像胡蘿蔔一樣。這樣,假設你有一個用戶可以執行的頁面來開始生成一個巨大的報告,你可以在消息隊列中啓動它,然後完成Tornado請求以及一些AJAX魔術和其他技巧(超出Tornado範圍),你可以坐下來等待消息隊列完成它的工作(技術上可能發生在不同物理位置的分佈式服務器上)。
ioloop.add_callback,Tornado將在下一次IOLoop迭代中執行回調。
不良建議警告:您可以使用多處理。
http://docs.python.org/library/multiprocessing.html
要小心,您關閉所有的數據庫連接(在催生代碼),做當它正常完成無子的請求任何其他龍捲風可能會做。其他答案聽起來更好。但是,你可以做到這一點。不要這樣做。
這是非常簡單的:
class Handler(tornado.web.RequestHandler):
def get(self):
self.write('response')
self.finish() # Connection is now closed
foo()
這會阻止io循環嗎? – raylu
是的,如果foo()阻止IO。不,如果foo()沒有。 經驗法則:如果foo()使用IOStream,那麼它是非阻塞的。如果它使用沒有IOStream的套接字,那麼它將被阻塞。 –
- 1. 龍捲風請求處理程序
- 2. 龍捲風和異步請求處理
- 3. 重構龍捲風請求處理器
- 4. 龍捲風:在異步處理程序中阻止HTTP請求
- 5. Python龍捲風請求處理程序映射
- 6. 龍捲風請求處理程序覆蓋頭方法
- 7. 關閉龍捲風處理程序
- 8. 從處理程序龍捲風返回(self.write)對象
- 9. 龍捲風:靜態處理
- 10. 用龍捲風處理stdin
- 11. 在另一個處理程序中調用龍捲風處理程序
- 12. 龍捲風處理程序中的多個self.write()命令
- 13. 龍捲風可以處理分頁嗎?
- 14. 如何批量處理龍捲風http_client.fetch
- 15. Python龍捲風處理器行爲
- 16. jquery-Ajax調用龍捲風處理程序等待透明ajax調用返回
- 17. 處理程序在龍捲風中生成全局變量
- 18. 如何從控制檯的龍捲風處理程序登錄?
- 19. 龍捲風websocket處理程序未捕獲的異常
- 20. 我在哪裏可以緩存龍捲風請求處理程序中的熊貓數據幀
- 21. 龍捲風在處理處理程序時如何處理遠程關閉連接?
- 22. 返回龍捲風
- 23. 完全處理openUrl請求後返回到源應用程序
- 24. websocket [龍捲風]的單個實例可以處理不同的請求嗎?
- 25. 處理CXF請求的前/後處理
- 26. 的NodeJS請求處理程序不等待函數返回
- 27. 我如何在處理程序中對龍捲風處理程序進行基準測試?
- 28. 龍捲風請求超時
- 29. 龍捲風 - 如何在另一個函數中調用處理程序
- 30. 如何在龍捲風請求處理程序中訪問我的url /路徑的部分
這是非常容易的;我會添加一個答案。 –