使用 App Engine Deferred 写入文件
Writing to a File using App Engine Deferred
我有一个任务想使用 App Engine 的 cron 作业调度程序开始。为了构建此任务的处理程序,我一直在寻找一个 App Engine article,它描述了如何使用 deferred
来确保长 运行 任务不会超时。
请注意,本文在更新模型实体的上下文中讨论了延迟。但是,我想用它来连续写入将托管在 Google 云存储 (GCS) 上的文件。
作为补偿,我曾考虑传递我正在使用的文件流,而不是像文章中 UpdateSchema
定义中那样传递 Cursor
对象。然而,在生产中(要写入 10k+ 个条目),我想这个 file/file 流将太大而无法传递。
因此,我想知道写入文件的一部分,将其保存到 GCS,然后在延迟再次运行时检索它,写入它,保存它是否是一个更好的主意,等等 - 或者完全做其他事情。我不太确定完成此类 App Engine 任务通常会做什么(即,输入位置是数据存储,但输出位置在其他地方)。
编辑:如果有区别,我正在使用Python
我怀疑文件流会在您的下一个任务获取它之前关闭,并且它不会工作。
您当然可以做到以下几点:
- 将 GCS 文件名传递给任务
- 读入整个文件。
- 创建一个包含旧数据和您要添加的任何新数据的新文件。
请注意,您不能在 GCS 中附加到文件,因此您必须读入整个文件然后重写它。
如果您的文件很大,您最好存储较小的文件并提出合适的命名方案,例如,为文件名添加索引。
我有一个任务想使用 App Engine 的 cron 作业调度程序开始。为了构建此任务的处理程序,我一直在寻找一个 App Engine article,它描述了如何使用 deferred
来确保长 运行 任务不会超时。
请注意,本文在更新模型实体的上下文中讨论了延迟。但是,我想用它来连续写入将托管在 Google 云存储 (GCS) 上的文件。
作为补偿,我曾考虑传递我正在使用的文件流,而不是像文章中 UpdateSchema
定义中那样传递 Cursor
对象。然而,在生产中(要写入 10k+ 个条目),我想这个 file/file 流将太大而无法传递。
因此,我想知道写入文件的一部分,将其保存到 GCS,然后在延迟再次运行时检索它,写入它,保存它是否是一个更好的主意,等等 - 或者完全做其他事情。我不太确定完成此类 App Engine 任务通常会做什么(即,输入位置是数据存储,但输出位置在其他地方)。
编辑:如果有区别,我正在使用Python
我怀疑文件流会在您的下一个任务获取它之前关闭,并且它不会工作。
您当然可以做到以下几点:
- 将 GCS 文件名传递给任务
- 读入整个文件。
- 创建一个包含旧数据和您要添加的任何新数据的新文件。
请注意,您不能在 GCS 中附加到文件,因此您必须读入整个文件然后重写它。
如果您的文件很大,您最好存储较小的文件并提出合适的命名方案,例如,为文件名添加索引。