0

我想知道在我的 Alexa Skill 中使用全局变量是否安全。这是我的设置:

* Python skill using flask-ask
* Deployed using Zappa as aws-lambda function
* Accessed over the AWS API gateway 
* Is an endpoint for an Alexa Skill with multiple languages

因此,我必须在一开始就确定每种用户的语言。然后我必须在剩下的互动中为他提供这种语言的对话。我的想法是使用on_session_started装饰器。像这样的东西:

@ask.on_session_started
def new_session():
    global LANG
    if x:
        LANG = "EN"
    else:
        LANG = "DE"

这里有几个问题在起作用。因为一切都如此交织在一起,我真的不确定潜在的问题。特别是我的不确定性与这些方面有关:

  • Lambda 函数在容器中运行。在连续调用时,要么使用同一个容器,要么创建一个新容器。
    1. 这对烧瓶问一般有什么影响?
    2. 这对包含多个问题 <-> 答案的用户会话有何影响?
  • 由于我使用on_session_started装饰器,因此全局变量仅在会话开始时设置一次:
    • 这对 2. 有何影响?会不会是在第一个用户请求和第二个请求之间,Lambda 使用了一个新的容器并且 LANG 被重置了?或者在会话结束之前,同一个烧瓶(-ask)实例是否处于活动状态?
4

1 回答 1

4

全局变量在基于 Lambda 的 Alexa 技能中非常成问题。它们的寿命是不确定的,并且可能在您的技能的不同用户之间共享。我以前被这些使用过,结果是难以调试的间歇性问题。

最好使用会话对象、数据库,如 dynamoDB,或者只是根据需要在函数之间传递变量。这样你就可以完全控制他们的寿命,以及谁/什么可以看到他们。

于 2018-01-07T12:50:04.017 回答