回答
你可以嘗試使用supervisord爲您Uwsgi應用經理。它還具有監視功能,可在文件或文件夾「已觸摸」/修改時自動重新加載進程。
在這裏你會找到一個很好的教程:Flask+NginX+Uwsgi+Supervisord
恐怕Flask實際上是過於粗暴,因此默認捆綁了這樣的實現。
動態重裝生產代碼通常是一件壞事,但如果你是關心的一個開發環境,看看這個的bash shell腳本http://aplawrence.com/Unixart/watchdir.html
只需更改到任何適合您的需求和替代睡眠間隔echo命令與你用來重新加載uwsgi的任何東西。我運行uwsgi un master模式併發送一個killall uwsgi命令。
開發模式Flask的自動重新加載功能實際上是由底層的Werkzeug庫提供的。相關的代碼在werkzeug/serving.py
- 值得一看。但基本上,主應用程序會將WSGI服務器作爲一個子進程生成,該進程每秒鐘對每個活動的.py
文件進行統計,以查找更改。如果它看到任何,子進程退出,並且父進程再次啓動它 - 實際上重新加載chages。
沒有理由不能在uWSGI層實現類似的技術。如果你不想使用stat循環,你可以嘗試使用底層的OS文件監視命令。顯然(根據Werkzeug的代碼),pyinotify是越野車,但也許Watchdog的作品?嘗試一些事情,看看會發生什麼。
編輯:
在迴應的意見,我認爲這將是很容易重新實現。從werkzeug/serving.py
建立從你的鏈接提供的例子,用代碼一起:
""" NOTE: _iter_module_files() and check_for_modifications() are both
copied from Werkzeug code. Include appropriate attribution if
actually used in a project. """
import uwsgi
from uwsgidecorators import timer
import sys
import os
def _iter_module_files():
for module in sys.modules.values():
filename = getattr(module, '__file__', None)
if filename:
old = None
while not os.path.isfile(filename):
old = filename
filename = os.path.dirname(filename)
if filename == old:
break
else:
if filename[-4:] in ('.pyc', '.pyo'):
filename = filename[:-1]
yield filename
@timer(3)
def check_for_modifications():
# Function-static variable... you could make this global, or whatever
mtimes = check_for_modifications.mtimes
for filename in _iter_module_files():
try:
mtime = os.stat(filename).st_mtime
except OSError:
continue
old_time = mtimes.get(filename)
if old_time is None:
mtimes[filename] = mtime
continue
elif mtime > old_time:
uwsgi.reload()
return
check_for_modifications.mtimes = {} # init static
這是未經測試,但應該工作。
感謝您的提示!我通過werkzeug.serving看了一下,但希望我能避免弄髒我的手,要求快速解決方案......也許是時候有人實現它了。 :) – Florian 2012-01-15 19:19:14
import gevent.wsgi
import werkzeug.serving
@werkzeug.serving.run_with_reloader
def runServer():
gevent.wsgi.WSGIServer(('', 5000), app).serve_forever()
(您可以使用任意WSGI服務器)
對於開發環境,你可以嘗試使用 --python,自動重裝uwsgi的參數。 查看源代碼,它只能在線程模式下工作(--enable-threads)。
這一個爲我工作。將'python-autoreload = 1'添加到我的'uwsgi.ini'文件中就可以重新加載!謝謝! – JoshFinnie 2014-05-13 21:15:59
使用uwsgi皇帝模式 - 這是通過添加到應用程序的ini。謝謝! – 2015-01-30 15:45:57
我認爲這是值得一提的是,值'1'和'TRUE'是*不*互換位置。只有'1'適合我。 – kungphu 2016-02-23 07:49:27
我正在運行uwsgi 1.9版。5,選擇
uwsgi --py-autoreload 1
的偉大工程
很好的捕獲。未列在--help輸出中。謝謝! – user237419 2014-04-09 09:47:35
使用uwsgi皇帝模式,既不適用於皇帝進程啓動也不適用於單獨的應用程序ini配置。前者給出「未知選項」,後者則不予理睬。無論哪種方式,過程必須重新啓動,以發現變化... – 2015-01-30 15:43:36
如何運行uwsgi --py-autoreload 1 – Burf2000 2016-11-19 15:50:07
如果您正在配置uwsgi
與命令參數,通過--py-autoreload=1
:
uwsgi --py-autoreload=1
如果您使用的是.ini
文件來配置uwsgi
和使用uwsgi --ini
,以下內容添加到您的.ini
文件:
py-autoreload = 1
- 1. Play(Scala)自動重新加載設置
- 2. 如何使用IPython重新加載和自動重新加載?
- 3. 在Flask服務器中自動重新加載FTP內容
- 4. 如何在flask-sqlalchemy中使用反射/自動加載
- 5. 檢查設備Chrome自動重新打開/重新加載
- 6. HMR啓用時如何使自動重新加載工作
- 7. 我們如何使用自動重新加載?
- 8. 如何使用調試器和自動重新加載我的Flask應用程序?
- 9. 使用PostCSS自動重設CSS重置
- 10. 如何使用Flask設置RSS mimetype?
- 11. uWSGI重置PythonHome
- 12. android保存/重新加載設置
- 13. Wicket:自動重新加載AjaxLazyLoadPanel
- 14. %重置後重新加載自動導入
- 15. Facebook登錄後自動重新加載
- 16. webpackDevMiddleware不會自動重新加載
- 17. 如何重新啓動flask服務器?
- 18. 自動重新加載rails模塊
- 19. 在腳上重新設置分頁重新加載或重繪
- 20. 我如何重新加載fancybox iframe窗體Flask中有錯誤
- 21. 如何啓用Grails 3.x自動重新加載?
- 22. 如何在Rails中啓用自動代碼重新加載
- 23. 如何避免XMLHttpRequest調用後自動頁面重新加載?
- 24. 如何使用無限滾動重新加載/刷新
- 25. Gulp - JADE - browserSync不自動重新加載
- 26. 如何重新啓動,重新加載或刷新活動?
- 27. vb6表格自動重新加載
- 28. 使用Browersync自動重新載入css
- 29. Grails項目不自動重新加載
- 30. 每當電腦自動重新啓動時PhpStorm重置設置
該鏈接不再可用 – ricosrealm 2017-12-09 01:45:58