2009-09-25 77 views
0

可以通過請求重新加載Django應用程序嗎?Django在每次請求時自動重新開發?

這對開發非常有用。 Ruby on Rails 就是這樣。

  1. 的runserver重新加載,但它重新加載慢,而且有時還是一個 必須停止和重新啓動它的一些變化顯示出來。 (在管理員的示範性變化。)
  2. 的mod_wsgi可以在Linux上通過觸摸* .wsgi文件自動重。 在Windows上,必須使用觀察者/重新加載器腳本,並且 的速度很慢。
  3. 我沒有嘗試mod_python或fastcgi,他們可以這樣做嗎?

此原因背後的原因是當更改腳本時,想要 更改立即顯示。

回答

2

當然這將是緩慢的重新加載,它必須再次不加載所有的應用程序代碼只是一個文件。 Django不是PHP,所以不要指望它的工作原理是一樣的。

如果你真的想給Django的每個請求重新加載不管,然後使用CGI和CGI/WSGI橋。儘管CGI本身增加了額外的開銷,但它仍然會很慢。

使用代碼監視器,其使用UNIX時,或者,如果使用的是Windows,是最好的折衷進行守護模式下工作的阿帕奇/ mod_wsgi的方法。也就是說,它每秒檢查一次代碼文件,它是被更改的應用程序的一部分,然後才重新啓動該進程。運行服務器本身也使用內存中的這種第二輪詢方法。

使用這種投票方式也引入一個第二個窗口已檢測代碼重載的要求之前,你可以提出請求。大多數人並不那麼快從保存文件到在瀏覽器中重新加載,因此不會注意到。

在Apache/mod_wsgi 3.0中,有一些機制可以允許人們實現替代代碼重新載入器,通過在請求開始時安排對已修改代碼的檢查來消除該窗口,但這會影響每個請求的表現。對於輪詢方法,它在後臺運行,因此通常不會對請求造成任何性能影響。

即使在使用最新版本的Apache/mod_wsgi中,也可以通過使用嵌入模式並將Apache MaxRequestsPerChild設置爲1來做同樣的事情,但這也會影響服務靜態文件的性能。

總之,試圖迫使每個請求重新加載是不要去關於它的最佳途徑,當然不會排除使用脂肪Python的Web應用程序,如Django的產生的負載延遲。

+1

'./manage.py runfcgi'也支持maxrequests參數,它可以設置爲1以強制重新加載。 http://docs.djangoproject.com/en/dev/howto/deployment/fastcgi/ – 2009-09-26 04:06:41

相關問題