2012-09-13 46 views
1

這是問題的不同的形式給出我已經問調用返回的HttpResponse後在Django視圖()的函數

Simultaneous multitasking in Django

,因此將共享前奏。


我在我的web項目中有一個耗時的功能。當函數正在進行計算時,應該提供一個網頁通知用戶,一旦計算完成,結果將通過電子郵件發送。

views.py: 

def web_function(request): 
    ... 
    return HttpResponse(results_will_be_sent_by_mail.html) 
    time_consuming_function() 

因爲有要呈現的頁面非常簡單,它需要從time_consuming_function(無返回信息)是有辦法跳過多任務處理,只是不知何故第一渲染和顯示頁面,不是打電話time_consuming_function( )?


可能的解決辦法:

  1. 當按下先於「web_function」的調用頁面上的輸入按鈕,附加一些JavaScript代碼,這將使得臨時頁?

更新

結束了使用芹菜。在試驗Ajax方面沒有成功。

+1

你不能用'request_finished'信號?但是,我不確定它在發送回覆之前/之後是否被提出。 https://docs.djangoproject.com/en/dev/ref/signals/#request-finished – Rohan

回答

6

函數中的return語句表示函數的結束。*您片斷的time_consuming功能以外的功能的scope,因此永遠不會達到。

一種用於處理任務可以是溶液:celery其非常適合用於包裝用作異步任務。如果你必須做的事情同步,你爲什麼不使用AJAX這個,所以你可以ATLEAST顯示用戶正在發生的事情有BeforeSend?

*這適用於Python和大多數,如果不是全部,面向對象的編程語言

+1

+1,其實,如果你有一個聰明的IDE,它會告訴你,「代碼不可達」。 –

+0

使用芹菜+1。但是,通常不要在Django Web進程中執行長時間運行的任務,即使使用AJAX(因爲這對於客戶端而不是Django服務器來說是異步的),因爲這會通過限制可用請求而降低應用程序的可伸縮性 - 處理線程。 – Steven

+0

@Hedde你可以指向一個好的教程整合BeforeSend? – TheMeaningfulEngineer

相關問題