在程序运行中动态改变变量

场景

出于测试目的,需要在程序运行中去改变程序中的参数

思路

动态的去读第三方存储,比如数据库,缓存,甚至是文件

我的实现

这里使用了gflags,通过flaks实现一个api提供flag的修改

Gflags 是 Google 内部使用的命令行标志库,它与其他库(例如)的不同之处在于getopt(),标志定义可以分散在源代码中,而不只是列在一个地方(例如)main()。实际上,这意味着单个源代码文件将定义和使用对该文件有意义的标志。任何链接到该文件的应用程序都将获得这些标志,并且 gflags 库将自动适当地处理该标志。

https://gflags.github.io/gflags/

demo代码

python 复制代码
import sys
import time
import gflags
import logging
import threading
from flask import Flask, request, jsonify

FLAGS = gflags.FLAGS

gflags.DEFINE_string('name', 'ming', 'this is a value')
gflags.DEFINE_integer('qps', 0, 'test qps')
gflags.DEFINE_boolean('isadmin', False, 'whether is admin')
gflags.DEFINE_float('price', 0.9, 'the price of apple')

def mainWork():
    while True:
        logging.info('Time gap output, {}'.format(FLAGS.flag_values_dict()))
        time.sleep(1)

# 通过flask实现修改flag的api
app = Flask(__name__)

@app.route('/flags/<flag_name>', methods=["GET", "POST"])
def monitorFlag(flag_name):
    flag_value = FLAGS.get(flag_name, None)
    if flag_value == None:
        return jsonify({'error': 'Flag({}) not exist!'.format(flag_name)})
    if request.method == 'GET':
        return jsonify(FLAGS.flag_values_dict())
    if request.method == 'POST':
        set_value = request.args.get('value')
        FLAGS.set_default(flag_name, set_value)
        return jsonify(FLAGS.flag_values_dict())

if __name__ == '__main__':
    logging.basicConfig(format='%(asctime)s : %(levelname)s : %(message)s', level=logging.INFO)
    FLAGS(sys.argv)

    # 起修改flag的http服务
    t = threading.Thread(target=app.run, args=('0.0.0.0', 52625))
    t.start()

    mainWork()
    # python gfthttpmodify.py -name name_start

启动

bash 复制代码
python gfthttpmodify.py -name name_start

如果如下

  • 启动是指定name=name_start
  • 通过curl修改flag,curl -X POST http://127.0.0.1:52625/flags/name\?value\=namebyhttp
  • name变成了namebyhttp
相关推荐
豆本-豆豆奶12 分钟前
最全面的Python重点知识汇总,建议收藏!
开发语言·数据库·python·oracle
Bosenya1216 分钟前
【信号处理】绘制IQ信号时域图、星座图、功率谱
开发语言·python·信号处理
AI原吾34 分钟前
探索PyAV:Python中的多媒体处理利器
开发语言·python·ai·pyav
oliveira-time44 分钟前
爬虫学习8
开发语言·javascript·爬虫·python·算法
正义的彬彬侠1 小时前
XGBoost算法Python代码实现
python·决策树·机器学习·numpy·集成学习·boosting·xgboost
昨天今天明天好多天1 小时前
【Python】解析 XML
xml·python
侯喵喵2 小时前
从零开始 blender插件开发
python·blender
SmallBambooCode2 小时前
【人工智能】阿里云PAI平台DSW实例一键安装Python脚本
linux·人工智能·python·阿里云·debian·脚本·模型训练
工业互联网专业2 小时前
Python毕业设计选题:基于django+vue的荣誉证书管理系统
python·django·vue·毕业设计·源码·课程设计
凉开水白菜2 小时前
米家通过HomeAssistant控制笔记本电脑开关机
python·电脑·智能家居·米家