Короткий ответ ДА, вот мой пример кода Azure Функция с триггером 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__()}!")
Я объявил глобальную переменную count
со значением генератора inc(0)
вне функции main
, тогда я могу получить увеличенный ответ на счет, как показано на рисунке ниже.
Это так же, как мой другой ответ на SO поток Azure использует python flask инфраструктуру для приложения функций .
Так что я думаю, что действительно нужно реализовать пул соединений в Azure функциях, таких как использование snowflakedb/snowflake-sqlalchemy
для создания пула соединений для базы данных Snowflake в Python вне функции main
из Azure Функция, как показано ниже, ссылаясь на документ SQLAlchemy Пул соединений .
import logging
import azure.functions as func
from sqlalchemy import create_engine
import sqlalchemy.pool as pool
engine = create_engine(
'snowflake://{user}:{password}@{account}/'.format(
user='<your_user_login_name>',
password='<your_password>',
account='<your_account_name>',
)
)
def getconn():
connection = engine.connect()
return connection
mypool = pool.QueuePool(getconn, max_overflow=10, pool_size=5)
def main(req: func.HttpRequest) -> func.HttpResponse:
try:
conn = mypool.connect()
# Do the code what you want, such as
# cursor = conn.cursor()
# cursor.execute("select foo")
....
finally:
conn.close()
return func.HttpResponse(f"......")
Объяснение приведенного выше кода состоит в следующем:
- Azure Функции для Python запускаются для компиляции исходного кода сверху вниз и загрузить свой байт-код в память, тогда объект
mypool
Он вызывается из памяти после выполнения функции main
до тех пор, пока mypool
не будет удален из памяти после долгого простоя. - При следующем запуске функции
main
после простоя новый объект mypool
будет создан и непрерывно делает, как указано выше.