目前我使用 云函数 编写了一些函数,如:

@engine.define
def test(**params):
	if is_debug:
		return 'debug'
	else:
    	return 'not debug'

很简单的一个函数,根据 is_debug 变量,返回一个值。

现在,如果我需要非常方便的修改这个值,并让它立刻起效,想问下有什么好的方案呢?

方法一:

把 is_debug 定义为 python 脚本中的 global 变量,然后再添加一个函数,来修改它,如:

is_debug = False

@engine.define
def test(**params):
	global is_debug
	if is_debug:
		return 'debug'
	else:
    	return 'not debug'

@engine.define
def update_is_debug(**params):
	global is_debug
	is_debug = ...

测试了一下,这个方式是可以的,在运行时,通过调用 update_is_debug 修改 is_debug 的值后,再调用 test 函数的返回就会发生变化。

但是有个问题,一旦更新了 python 脚本,重新部署后,is_debug 的值就会恢复到 False,即使之前是 True。

这个问题,我暂时不知道如何解决好。

方案二:

在 LeanStorage 中建一个表,将 is_debug 的值保存期中,在 python 脚本中去读取这个值。

但是为了减少读取的次数,最好是这样:

  1. 每次表中的 is_debug 值更新,就调用一下 update_is_debug 函数,更新一下脚本中的值
  2. 每次重新部署脚本后,读取一下表中的 is_debug 值,初始化一下脚本中的 is_debug 值

    @engine.define
    def init_is_debug(**params):
    global is_debug
    is_debug = ... 从 LeanStorage 表中读取加载

1的话通过,hook 就可以实现,只是 2 的话,不知道要怎么才能在每次 deploy 部署以后,自动的调用一下某个初始化函数。

方案三:
使用 leancache,这个貌似有些没有必要,因为我的需求只是保存一些类似配置用的值,偶尔会更新。

想问下各位什么方案,才是比较好的。谢谢。

1的话通过,hook 就可以实现,只是 2 的话,不知道要怎么才能在每次 deploy 部署以后,自动的调用一下某个初始化函数。

只要在最外层作用域里调用函数,就会在进程启动的时候执行了。