2013-06-25 48 views
14

Flask是否有辦法將響應發送給客戶端,然後繼續進行一些處理?我有一些要做的記賬工作,但我不想讓客戶等待。瓶頸響應和繼續處理

請注意,這些實際上是我想要做的非常快的事情,因此創建一個新線程或使用一個隊列在這裏並不合適。 (其中一個快速的東西實際上是添加的東西給作業隊列。)

+1

看看'芹菜'或其他問題http://stackoverflow.com/q/16870858/880326和http://stackoverflow.com/q/15969213/880326。 – tbicr

回答

4

聽起來像Teardown Callbacks會支持你想要的。您可能希望將其與Per-Request After-Request Callbacks中的模式結合使用,以幫助組織代碼。

+0

這看起來最接近我想要的。這不是路徑特定的,但該模式顯示瞭如何輕鬆完成。 –

+0

你最終得到了工作代碼? – luckydonald

+1

只是一個更新 - 這不* *完成提問者想要的東西,因爲Flask在釋放響應之前仍然等待拆卸函數完成。 –

2

你可以找到如何內瓶 這裏https://gist.github.com/jzempel/3201722

使用芹菜從理念的要點一個例子(雙關語意)是以@ celery.task定義長期的簿記任務,並使用apply_async 1或從視圖內延遲以開始任務

2

我的博客有類似的問題。我想在發佈新評論時向訂閱評論的用戶發送通知電子郵件,但我不希望發佈評論的人等待所有電子郵件發送,然後才能得到他的回覆。

我爲此使用了一個multiprocessing.Pool。我創建了一個工作人員池(這足夠了,流量低的站點),然後每次我需要發送一封電子郵件時,我都準備好Flask視圖功能中的所有內容,但是通過apply_async將最後的send_email呼叫傳遞給池。