Мне нужен метод, который сохраняет объект (модель) в локальной файловой системе или в сегменте S3. Место назначения определяется переменной среды MODELS_DIR
. У меня есть две версии, где первая немного длиннее, и я довольно уверен в ее правильности. Вторая версия короче, но я беспокоюсь, что не использовать оператор with
на самом деле неправильно.
def persist_model(model, model_name):
""" VERSION 1
Persist `model` under the name `model_name` to the environment variable
`MODELS_DIR` (having a trailing '/').
"""
MODELS_DIR = os.getenv('MODELS_DIR')
if MODELS_DIR.startswith('s3://'):
s3 = s3fs.S3FileSystem()
with s3.open(MODELS_DIR[5:] + model_name, 'wb') as f:
joblib.dump(model, f)
else:
with open(MODELS_DIR + model_name, 'wb') as f:
joblib.dump(model, f)
и
def persist_model(model, model_name):
"""VERSION 2
Persist `model` under the name `model_name` to the environment variable
`MODELS_DIR` (having a trailing '/').
"""
MODELS_DIR = os.getenv('MODELS_DIR')
if MODELS_DIR.startswith('s3://'):
s3 = s3fs.S3FileSystem()
f = s3.open(MODELS_DIR[5:] + model_name, 'wb')
else:
f = open(MODELS_DIR + model_name, 'wb')
joblib.dump(model, f)
Мой вопрос: безопасна ли вторая версия?