0

我正在使用由服务总线队列触发的 Python 函数应用程序将数据存储在 SQL Server 中。我需要处理与 SQL Server 的连接。

我找到了这个链接。具体来说,人们经常在主函数之外发起连接,然后在主函数中使用它。在文档之后,可以重新使用连接。但问题是:Microsoft 教程仅使用 C# 和 JavaScript 编写。

我已尝试使用以下示例源代码,它运行良好,但我不知道 Function App 是否会创建新连接。

import azure.functions as func

connection = getConnection()

def main(msg: func.ServiceBusMessage):
    # get content of message
    mess = msg.get_body().decode("utf-8")
    logging.info(mess)
    message = eval(str(mess))  # Sensitive

    # handle scenarios
    data = handle_message_from_device(message)
    insert(connection, data)

我想问一下:

  • 有了上面的源代码,Function App 可以重用连接还是新建一个?如果它重新使用连接,Function App 只要运行就可以保持这个连接吗?
  • Python 函数应用程序如何重用此连接?目前,我认为当向 Function App 推送新消息时,将调用主文件(默认为 init 文件)。那么在这种情况下,应该调用一条新消息吗?

提前致谢 :-)

4

1 回答 1

1

是的,这应该可以正常工作。connection = GetConnection()在函数(冷)启动时仅调用一次。从那里开始,它会保持“温暖”约 5 分钟。如果另一个请求进入 - 到函数的同一个实例 - 它将被重用。超时后,您的函数将被回收。在下一次调用时,它会再次启动并创建另一个连接对象。

您可以通过向您的GetConnection()方法添加一些日志记录来简单地对此进行测试。你会看到这只会在第一次启动时执行。对于接下来几秒/分钟内的后续请求,它不会再次被调用。当然,除非您的函数扩展到其他实例。

于 2019-10-31T10:24:00.040 回答