v2gba
V2EX  ›  问与答

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

  •  
  •   v2gba · May 29, 2015 · 3908 views
    This topic created in 4072 days ago, the information mentioned may be changed or developed.
    比如我config中有行配置是
    version = 1.0

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

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

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

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


    @killpanda
    暂时不考虑第三方库, 因为这种似乎不如@awanabe 说的直接用uwsgi这样的办法来重启方便.
    facat
        6
    facat  
       May 29, 2015
    如果用的是uwsgi
    可以这样
    uwsgi --reload /tmp/uwsgi-master.pid 重启
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   3124 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 66ms · UTC 14:01 · PVG 22:01 · LAX 07:01 · JFK 10:01
    ♥ Do have faith in what you're doing.