2012-03-13 44 views
2

我有一個webhook需要一點時間才能完成(大約5分鐘)。但是,請求在大約30秒後會超時。如何防止在Django FCGI請求超時

我與HostGator共享主機並使用FCGI進行部署。

我認爲請求超時,因爲沒有HTTPResponse直到請求被處理。如果我可以在處理請求時從視圖生成一些HTTPResponse,則腳本可能會運行更長時間。

[P.S .:早先我試過Google App Engine,在這裏使用 print 'hi'會在瀏覽器中打印'hi'而不是記錄它。 Django可能也是如此。這樣做可能會在請求完成時發送響應。] (我在Django IRC上被告知,即使我能夠獲得打印以發送消息作爲響應,它只會在返回Httpresponse時拋出)。使用Httpresponse與迭代。

回答

1

在Django IRC的傢伙告訴用發生器使用HttpResponse不斷髮送輸出,從而防止腳本空閒超時。

與發生器一起使用Httpresponse的代碼奇妙地是described herehere

謝謝大家!

2

超時在web服務器中,而不是在Django中。您向web服務器發出請求並從中獲得響應,因此除了響應之外,您無法獲取任何內容。在你的情況下,你應該在服務器上創建一個後臺任務,通常由cron或芹菜開始(它狡猾,你不能在hostgator上運行芹菜,所以使用cron)和一系列任務。在cliend端,您定期使用AJAX向服務器發送請求,因此您可以檢查任務的狀態並在完成後顯示通知。

+0

嗨ilavar,是的超時是從Apache服務器,而不是從Django。但超時是由於Django腳本超過30秒沒有回覆(因爲它僅在處理完成後才拋出輸出)。它已經是一個webhook(也被Celery或其他隊列程序使用)。通過在迭代中使用HttpResponse解決了該問題(如IRC上的建議)。將很快發佈在這裏。 – Pratyush 2012-03-13 18:54:08