回答
你可以尝试使用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