【问题标题】:Google Natural Language API - ERROR: Too many open filesGoogle 自然语言 API - 错误:打开的文件太多
【发布时间】:2019-05-28 07:09:28
【问题描述】:

我正在使用谷歌Natural Language Content Classification API
我正在通过一个目录中的服务帐户.json 文件进行身份验证,该目录中的路径暴露在GOOGLE_APPLICATION_CREDENTIALS 环境变量中。

当我将分类脚本作为 1 个实例运行时没有问题。
但是,当我并行运行我的分类脚本时(4、6、8、10 个 Docker 容器在 1 台机器上运行),我偶尔会收到以下错误:
[Errno 24] Too many open files: '/PATH/TO/MY-JSON_KEY.json'

我看过related issues建议增加ulimit

这似乎更像是一种回避潜在问题的方法。

似乎 Google 库 API 调用可能正在打开帐户凭据文件但没有关闭它?

更新
这是我设法检索到的更长的错误消息:

google.auth.exceptions.TransportError: HTTPSConnectionPool(host='oauth2.googleapis.com', port=443): url: /token 超过最大重试次数(由 NewConnectionError(': 无法建立新连接: [Errno 24] 打开的文件太多'))

【问题讨论】:

  • 你有解决办法吗?
  • 我有一个解决方法,但不是解决方案。我所做的是同时运行许多调用 API 的容器,这样我就可以更快地处理数据。
  • 那么您的 1 个实例上的每个容器都有自己的 json 文件?
  • 是的。作为Dockerfile 步骤的一部分,每个容器都将.json 文件复制到其中。而且它们是相同的,我只是通过重复docker run... 来开始它们中的许多

标签: google-natural-language


【解决方案1】:

我试过del client,后来又打电话给gc.collect()。它对我有用:)

【讨论】:

    【解决方案2】:

    我想我最近遇到了同样的问题,问题似乎是自然语言 API 客户端被多次调用,它会查找“/PATH/TO/MY-JSON_KEY.json”然后打开直到达到限制,我想同时将工作负载划分到多个容器中可能不会达到限制,但是如果工作负载增加,即使使用多个容器也可能再次达到限制,所以我建议你检查下一行被调用了多少次。

    client = language_v1.LanguageServiceClient()

    在确保只调用了一次之后,我没有遇到任何问题,更多信息,这是我的post,希望它可以帮助队友。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-03
      • 2010-12-07
      • 1970-01-01
      • 2014-06-23
      • 2016-03-17
      • 1970-01-01
      相关资源
      最近更新 更多