V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
MrGba2z
V2EX  ›  问与答

flask 如何在运行中修改配置文件?以及如何重启 flask 应用

  •  
  •   MrGba2z · 2015-05-29 10:19:36 +08:00 · 3395 次点击
    这是一个创建于 3465 天前的主题,其中的信息可能已经有所发展或是发生改变。
    比如我config中有行配置是
    version = 1.0

    而我想在运行的时候,
    把version改成1.1(硬修改, 程序退出时, 文件中要依旧是1.1, 这样下次运行就直接是1.1了)
    是不是只有字符串查找并且替换这种办法? 有没有好一点的做法(在不使用数据库的情况下)

    第二个问题是:
    如何在flask应用中重启自身?就像开启了debug模式那样的重启就行.(不用做到检测代码修改那种, 只要能写出个函数调用后重启应用就行)
    在关闭debug模式后, 能实现吗? 我在stackoverflow上看了下并没有类似的答案.
    6 条回复    2015-05-29 11:22:00 +08:00
    loading
        1
    loading  
       2015-05-29 10:30:53 +08:00   ❤️ 1
    flask.g 里面保存所有设置项目,然后做个接口,访问时刷新这个变量。
    killpanda
        2
    killpanda  
       2015-05-29 10:35:05 +08:00 via iPad
    搜搜 watchdog
    sunus
        3
    sunus  
       2015-05-29 10:37:19 +08:00
    如果是多个实例就不行。比如用gunicorn跑,会有N个flask实例在跑,接口访问不确定会是哪个实例。

    gunicorn可以通过-HUP来reload各个实例。网上也能找到很多zero downtime app deployment。 感觉都稍微复杂了点。

    我也很好奇最佳实践是什么样的。希望能找到方便的办法动态更改app的配置
    awanabe
        4
    awanabe  
       2015-05-29 10:41:24 +08:00 via Android   ❤️ 1
    首先,你在服务器上面直接用flask 的 app.run() 跑单实例么?这样做阻塞很严重。
    一般做法就是开uwsgi之类的应用服务器,每次更新代码之后,直接uwsgi 重启就可以部署新代码,自己写一个脚本,每次调用即可
    MrGba2z
        5
    MrGba2z  
    OP
       2015-05-29 11:20:21 +08:00
    @loading
    正在看, 感谢告之,


    @killpanda
    暂时不考虑第三方库, 因为这种似乎不如@awanabe 说的直接用uwsgi这样的办法来重启方便.
    facat
        6
    facat  
       2015-05-29 11:22:00 +08:00
    如果用的是uwsgi
    可以这样
    uwsgi --reload /tmp/uwsgi-master.pid 重启
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   927 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 75ms · UTC 21:13 · PVG 05:13 · LAX 13:13 · JFK 16:13
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.