При использовании boto безопасно ли иметь долго работающий клиентский объект? - PullRequest
0 голосов
/ 27 июня 2018

Итак, допустим, у меня есть долго работающий веб-сервер, который выполняет вызовы к API-интерфейсу aws? Безопасно ли иметь долго работающий клиентский объект, или этот объект может быть поврежден и испортить мой веб-сервер? Для конкретности лучше сделать что-то вроде этого

import boto3

client = boto3.client('elb')

def function():
    do stuff with client

или это

import boto3

def function():
    client = boto3.client('elb')
    do stuff with client

Первый вариант лучше, потому что я могу повторно использовать один и тот же клиентский объект в нескольких функциях. Последний вариант был бы лучше, если бы моя вышеупомянутая проблема безопасности действительна.

1 Ответ

0 голосов
/ 27 июня 2018

Мой предпочтительный способ сделать что-то вроде этого - передать клиента в качестве параметра функции, которая будет его использовать. Что-то вроде

import boto3

def function(param1, param2, client=None):
    if client is None:
        client = boto3.client('elb') # use default client

    return client.do_stuff(param1, param2)

def function2(param3, param4, client=None):
    if client is None:
        client = boto3.client('elb') # use default client

    return client.do_different_stuff(param3, param4)

Тогда вы можете назвать это как:

import boto3

client = boto3.client('elb')
stuff = function("a", "b", client=client)
different_stuff = function2("c", "d", client=client)

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

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