回答
你可以嘗試使用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. 在Flask服務器中自動重新加載FTP內容
- 2. HMR啓用時如何使自動重新加載工作
- 3. 我們如何使用自動重新加載?
- 4. 如何使用調試器和自動重新加載我的Flask應用程序?
- 5. 使用PostCSS自動重設CSS重置
- 6. 如何使用Flask設置RSS mimetype?
- 7. Wicket:自動重新加載AjaxLazyLoadPanel
- 8. %重置後重新加載自動導入
- 9. webpackDevMiddleware不會自動重新加載
- 10. 如何重新啓動flask服務器?
- 11. 自動重新加載rails模塊
- 12. 如何啓用Grails 3.x自動重新加載?
- 13. 如何重新啓動,重新加載或刷新活動?
- 14. 每當電腦自動重新啓動時PhpStorm重置設置
- 15. nginx如何與運行Flask應用的uWSGI配合使用?
- 16. 如何使用jQuery Masonry重新加載?
- 17. 如何自動加載寶石,而無需重新啓動Rails?
- 18. Docker上自動重新加載瓶服務器
- 19. 如何使用自動加載來正確加載自定義配置?
- 20. 自動重新加載Tomcat webapp?
- 21. 自動重新加載模板文件
- 22. QT4:如何重新啓動應用程序?重新設置?
- 23. Yii2頁面自動重新加載
- 24. 使用AdMob重新加載活動
- 25. 自動重新加載div容器
- 26. swift - 設置UILabel無需重新加載自定義UITableViewCell
- 27. 配置自動重新加載與並行線程
- 28. 如何重置場景重置事件訂閱(重新加載)
- 29. 在頁面加載/重新加載時設置選擇值
- 30. 在簡歷上重新加載SharedPreferences? (或如何刷新/重新加載活動)
該鏈接不再可用 – ricosrealm 2017-12-09 01:45:58