Приложение-функция Azure - Python - одно соединение без повторной инициализации

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

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

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

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)

Я хочу спросить:

  • Может ли приложение-функция с приведенным выше исходным кодом повторно использовать соединение или создать новое? Если оно повторно использует соединение, может ли приложение-функция оставаться в этом соединении, пока оно работает?
  • Как приложение-функция Python может повторно использовать это соединение? В настоящее время я думаю, что когда новое сообщение отправляется в приложение-функцию, будет вызываться главный файл (по умолчанию файл инициализации). Значит, в этом случае вместо этого следует вызвать новое сообщение?

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


person Truong Nguyen    schedule 30.10.2019    source источник
comment
пожалуйста, опубликуйте соответствующий код того, что вы сделали / пробовали до сих пор   -  person silent    schedule 30.10.2019
comment
Спасибо, я переделал свой вопрос с образцом исходного кода.   -  person Truong Nguyen    schedule 31.10.2019


Ответы (1)


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

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

person silent    schedule 31.10.2019
comment
Спасибо, молчите. Как насчет случая, когда сетевое соединение отключено на некоторое время, может ли соединение попытаться повторно подключиться к моему серверу? - person Truong Nguyen; 01.11.2019