使用uwsgi和nginx做伺服器和django框架,為什麼每次修改代碼都需要重啟uwsgi呢?

我的uwsgi配置如下

[uwsgi]
socket = 127.0.0.1:5000
chmod-socket = 777
limit-as = 256
processes = 2
max-request = 2000
memory-report = true
enable-threads = true
pythonpath = /home/user/webtest/webpython/mysite
chdir = /home/user/webtest/webpython/mysite
wsgi-file = /home/user/webtest/webpython/mysite/main.py

我的nginx配置文件如下

server {
listen 80;
server_name www.test.com;

location / {
include uwsgi_params;
uwsgi_pass 127.0.0.1:5000;
}
}

不知道為什麼每次修改Django裡面的代碼都需要重啟uwsgi。新手,希望能的到詳細指點。謝謝


uwsgi本身就是這樣的機制,主要還是為了效率。它有一個reload的參數,可以指定某個文件,當文件發生變化時,會自動重啟。你也可以考慮用這個。


還有一種方法配置「py-autoreload = 1」,每次修改代碼會自動reload,不再需要手動重啟。


uwsgi --reload uwsgi.pid

其中uwsgi.pid是進程的pid文件


平時不用 uwsgi (我是 gunicorn 黨),不過 google 到了這個 uWSGI + django autoreload module


重啟 uwsgi 進程顯然是為了讓新代碼生效, 如果你僅是在開發環境調試程序,直接使用django 的 manager.py runserver 可以自動重載修改的py文件, 生產環境也不會存在你在上面不停修改py文件而需要不停重載uwsgi的需求吧.

另外可以參考 uwsgi 的控制信號 Managing the uWSGI server

如果要重載 uwsgi 的程序, 只需要發送一個 SIGHUP 的信號給 uwsgi 的主進程即可.


我想問了解一下你的靜態文件怎樣設置,載入出來的


寫了一個reload uWSGI的腳本,WUJISHANXIA/leetcode 可以方便重啟uwsgi服務


--touch-reload reload uWSGI if the specified file is modified/touched


推薦閱讀:

為什麼感覺現在搜索到的東西,越來越糟呢?
varnish / squid / nginx cache 有什麼不同?
微軟的 Web 伺服器為何能屹立不倒?
Linux多進程模型比多線程更容易實現熱部署嗎?
Nginx 多進程模型是如何實現高並發的?

TAG:Python | Django框架 | Nginx | Python框架 | uwsgi |