使用python在s3中自动生成文件名的最佳方法

问题描述 投票:0回答:1

我有一个python脚本,其中,我正在构建doc2vec模型并将其保存到具有不同版本名称的s3中。请参阅截图以供参考

enter image description here

现在数据库中的数据每周更新一次,我需要重新构建包括新数据的doc2vec模型。

为此,我已在AWS Lambda中安排了一个脚本,每周一次运行python脚本。

现在我要在本周以“ model_d2v_version_008”开头的模型名称将模型保存到s3中,然后在下周以“ model_d2v_version_009”的开头,依此类推,每周一次。

我曾在自动化过程之前提供过model_name的信息

def d2v_doc(titles_df):
    tagged_data = [TaggedDocument(words=_d, tags=[str(titles_df['id_titles'][i])]) for i, _d in enumerate(titles_df['doc'])]
    model_d2v = Doc2Vec(vector_size=300,min_count=10, dm=1)
    model_d2v.build_vocab(tagged_data)
    model_d2v.train(tagged_data,epochs=100,total_examples=model_d2v.corpus_count)
    return model_d2v

def save_d2v_to_s3(model,fname):
    model_name = fname
    joblib.dump(model,model_name)
    s3_base_path='s3://sd-flikku/datalake/doc2vec_model'
    path = s3_base_path+'/'+model_name
    command = "aws s3 cp {} {}".format(model_name,path).split()
    print('saving...'+model_name)
    subprocess.call(command)


model_doc = d2v_doc(titles_df)

save_d2v_to_s3(model_doc,"model_d2v_version_007")

现在,由于该过程是自动化的,所以我希望model_names保持相同的格式,并每周增加版本数。我该怎么办?

python-3.x amazon-web-services amazon-s3 doc2vec
1个回答
1
投票
它编码额外的有用信息。如果偶尔发生故障或异常情况,使运行晚,晚或永不发生,它们仍会按正确的顺序排序,并带有一些有关已发生偏差的提示。 (“哦,20200719不见了。那不是流星罢工的那一周吗?”)

如果系统的寿命比预期的长,或者以加速的进度(只要每天仍不超过一次),它们的排序仍然正确。 (格式为YYYYMMDD的数字在到达007时会以一种有用的方式停止排序。)

[如果您确实希望每天创建多个模型,则可以使用后缀,精确到分钟或秒(1000,甚至可能带有尾随的'Z'来暗示UTC),例如现在[ C0]。

如果仅使用AWS存储桶信息就需要对所有版本进行计数,则它需要与其他任何编号相同的over-key迭代键(才能到达最后一项),同时在其中使其他有用信息(最早,最新)生动起来。文件名。

进行新的保存只需要准确的系统日期即可。 (而且,尽管时钟错误可能导致各种各样的毛病,但如今,一个能够读写S3的系统几乎总是有一个可靠的日期。)确保您不会无意间重用名称,从而可能会破坏名称事先运行,需要完全相同的检查量。 (但是,如果存在多个系统/进程以几乎同时/交错的方式尝试相同操作的风险,则风险之窗仍然很小。)

另一方面,如果您确实要使用简单的固定宽度递增版本号,请将最后使用的编号存储在某个地方。当您需要新名称时...

YYYYMMDDHHMMSS

但是基于日期/时间戳的命名要好得多:

'model_d2v_version_20200518183227Z'
© www.soinside.com 2019 - 2024. All rights reserved.