使 Flask 仅在编辑特定文件时重启

Make Flask restart only when a specific file is edited

我用 Flask 建立了一个网站(在 flask mega tutorial 之后)。 我有我的 views.py ,我在开发时对其进行编辑。在同一目录中,我有一个 temp.py 以编程方式编辑。

现在我将我的服务器设置为 DEBUG,这样每次我编辑 views.py,服务器都会重新启动。我的问题是,每次我的程序编辑 temp.py 时,服务器也会重新启动,这会导致很多事情中断。 有什么办法可以让 flask 在决定重启时忽略 temp.py 只看 views.py 吗?

禁止 Flask 服务器在所有源文件更改的调试模式下重新启动

摘自Flask documentation

Flask will suppress any server error with a generic error page unless it is in debug mode. As such to enable just the interactive debugger without the code reloading, you have to invoke run() with debug=True and use_reloader=False.

如果更改了任何源文件,以下内容将确保服务器不会重新启动:

app.run(debug=True, use_reloader=False)

禁止 Flask 服务器在调试模式下重新启动某些源文件更改

对于您的特定场景,您希望仅针对某些源文件抑制服务器重启,我将使用动态模块加载。实现此目的的最简单方法是从导入中删除特定模块并改用 __import__ 函数。

示例代码 - 调用函数 modules.temp.ololo(args):

try:
    # Dynamic import
    module = __import__('modules.temp')
    try:
        # Execute function
        res = getattr(module, 'ololo')(args)
    except AttributeError:
        flask.current_app.logger.error('Function not found')
except ImportError:
    flask.current_app.logger.error('Module not found')

将您的 temp.py 移动到一个专用于动态加载的模块中,并调整您的代码以类似的方式使用那里的资源。