【问题标题】:NLTK corpora download is hanging when run in AWS Lambda Python function在 AWS Lambda Python 函数中运行时,NLTK 语料库下载挂起
【发布时间】:2021-12-09 07:23:58
【问题描述】:

我正在尝试将 NLTK 数据下载到 Lambda 函数的文件存储中,如下所示:

nltk.data.path.append("/tmp")
nltk.download("popular", download_dir="/tmp")

Lambda 函数不断超时。当我检查 Cloudwatch 日志时,我没有看到与下载不同语料库文件相关的日志(例如Downloading package cmudict to /tmp...;相反,代码似乎达到了nltk.download(),然后永远挂起。

有人见过这种奇怪的行为吗?

【问题讨论】:

    标签: python lambda nltk


    【解决方案1】:

    Lambda 有几个限制(或者更确切地说是概念)与您在此处尝试执行的操作相冲突:

    • Lambda 旨在执行相当简单的函数。因此,它们带有默认情况下非常短(3 秒)的超时。在执行期间尝试运行某种下载会给您带来麻烦。当然,您可以尝试延长该超时时间(最多 15 分钟),但您会遇到其他问题(见下文)。
    • Lambda 是短暂的,在 5 分钟不活动后它们会被清除,并且需要在随后的调用中重新实例化(AWS 称之为“冷启动”)。这意味着即使您设法在 Lambda 中下载了您的 nltk,它也不会被保留,并且无论如何都需要在每次冷启动后重新加载。
    • 我想您可以尝试手动添加 nltk 数据,但是有 50MB 的大小限制,在所有情况下都很难将数据添加到函数中。

    如果您需要数据可用于您的 Lambda 函数,最简单的方法可能是使用 S3 存储桶来存储数据。你可以找到一个详细的例子来说明如何做到这一点here(感谢Alexey Smirnov)。

    【讨论】:

      【解决方案2】:

      知道了:我的 Lambda 函数在 VPC 中运行。我必须添加一个端点以使 VPC 能够访问 S3。

      【讨论】:

      • 您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center
      猜你喜欢
      • 2017-07-11
      • 2021-08-21
      • 2021-06-02
      • 1970-01-01
      • 2017-09-28
      • 1970-01-01
      • 2014-02-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多