Приложение-функция Azure - Python - одиночное соединение без повторной инициализации - PullRequest
0 голосов
/ 30 октября 2019

Я использую приложение Python Function App, которое запускается очередью служебной шины для хранения данных в SQL Server. Мне нужно обработать соединение с SQL Server.

Я нашел эту ссылку . В частности, люди часто инициируют соединение вне основной функции, а затем используют его в основной функции. После документа соединение может быть использовано повторно. Но проблема в следующем: учебник Microsoft сделан только на C # и JavaScript.

Я пробовал использовать следующий пример исходного кода, он работает хорошо, но я не знаю, создаст ли приложение Function Function новое соединение илиnot.

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-файл). Так что в этом случае вместо этого должно быть вызвано новое сообщение?

Заранее спасибо: -)

1 Ответ

0 голосов
/ 31 октября 2019

Да, это должно работать просто отлично. connection = GetConnection() вызывается только один раз при холодном запуске функции. С этого момента он остается "теплым" в течение 5 минут. Если поступит другой запрос - к тому же экземпляру функции - он будет использован повторно. После истечения времени ожидания ваша функция будет переработана. При следующем вызове он запускается снова, и создается другой объект подключения.

Вы можете просто проверить это, добавив некоторые записи в ваш метод GetConnection(). Вы увидите, что это будет выполнено только при первом запуске. Для последующих запросов в течение следующих нескольких секунд / минут он больше не будет вызываться. Если, конечно, ваша функция не масштабируется до дополнительных экземпляров.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...