Azure函数-雪花python连接器的池dbconnection

Azure函数-雪花python连接器的池dbconnection,azure,azure-functions,snowflake-cloud-data-platform,dbconnection,Azure,Azure Functions,Snowflake Cloud Data Platform,Dbconnection,我有一个azure functions应用程序Python,它连接到snowflake数据库创建一个dbconnection对象,执行查询并返回结果,它一直工作正常。唯一的挑战是返回查询所需的时间。每次调用dbconnection对象时,它都会创建该对象 问题:考虑到functions应用程序是无状态的,是否可以使用functions应用程序共享连接?简短的回答是肯定的,下面是我的Azure Function和HTTP触发器的示例代码 import logging import azure.f

我有一个azure functions应用程序Python,它连接到snowflake数据库创建一个dbconnection对象,执行查询并返回结果,它一直工作正常。唯一的挑战是返回查询所需的时间。每次调用dbconnection对象时,它都会创建该对象


问题:考虑到functions应用程序是无状态的,是否可以使用functions应用程序共享连接?

简短的回答是肯定的,下面是我的Azure Function和HTTP触发器的示例代码

import logging

import azure.functions as func

def inc(n):
    while True:
        n += 1
        yield n

count = inc(0)

def main(req: func.HttpRequest) -> func.HttpResponse:
    logging.info('Python HTTP trigger function processed a request.')

    return func.HttpResponse(f"Count: {count.__next__()}!")
我在函数main之外声明了一个全局变量count,其值为生成器inc0,然后我可以得到一个递增的count响应,如下图所示

这与我对SO线程的另一个答案相同

因此,我认为确实需要在Azure函数中实现连接池,例如在Azure函数的函数main之外使用Python为雪花数据库创建连接池,如下代码所示,请参考SQLAlchemy文档

对上述代码的解释如下

import logging

import azure.functions as func

def inc(n):
    while True:
        n += 1
        yield n

count = inc(0)

def main(req: func.HttpRequest) -> func.HttpResponse:
    logging.info('Python HTTP trigger function processed a request.')

    return func.HttpResponse(f"Count: {count.__next__()}!")
Azure函数for Python启动,从上到下编译源代码并将其字节码加载到内存中,然后在主函数触发后从内存调用mypool对象,直到mypool在长时间空闲后从内存中删除。 下次空闲后触发main函数时,将创建一个新的mypool对象,并继续执行上述操作。
这回答了你的问题吗?不,它不是,因为函数本质上是无状态的。每次调用函数都会再次调用连接对象。在这些情况下,谁维护连接池。有一个问题。。理想情况下,不应在每次调用时调用getconn。如果您开始记录,您将看到在每个involcation上调用taht getconn