【问题标题】:is there a way that Cloud Function can deal with long run operation?Cloud Function 有没有办法处理长期运行?
【发布时间】:2019-03-23 19:54:45
【问题描述】:

如果我想通过 VISION API (Python3) 使用 GCP Cloud Function 来自动化(同时并行化)图像识别,但 CF 的硬性限制为 9 分钟的持续时间。如果图像非常大,并且需要很长时间才能被识别(超过 9 分钟)怎么办?有什么建议?

【问题讨论】:

    标签: google-cloud-platform google-cloud-functions vision


    【解决方案1】:

    在 Cloud Function 代码中,您可以将工作卸载到App EngineCompute Engine

    【讨论】:

    • 这不是很困难。您只需转身并从您的函数中进行另一个更适合长时间运行操作的 API 调用。您可以使用 HTTP API 轻松创建灵活的 App Engine 服务,让您开始一些工作。它会根据需要启动执行工作的服务器实例。这比编写一堆代码来让 Cloud Functions 做一些不应该做的事情更具可扩展性、灵活性和成本效益。
    • 有意思,但是如何保证工作的并行化和效率呢?
    • 这取决于您卸载工作的服务,而不是 Cloud Functions。
    【解决方案2】:

    Cloud Vision API 提供 asynchronous version of the API calls,它将返回作业的操作 ID。

    我会创建两个云函数来处理这种情况。主要功能将启动异步操作,响应代码应与您是否能够启动作业相匹配,正文包含您想要跟进的任何详细信息以及 OperationID。

    第二个函数将接受操作 id 并检查当前状态,如果操作完成则返回结果。该函数是在内部轮询一段时间还是仅进行快速检查和立即响应取决于您以及您希望该过程如何工作。我可能会让前端显示一个“处理”图标,并每隔 10 秒左右检查一次,并立即做出响应。

    【讨论】:

    • 你不能有一个轮询的云功能。它们以事件驱动的方式调用。我怀疑云视觉 API 将无法生成可能触发第二个函数的事件。
    • 您可以在函数内部手动轮询,使用任何等待结果或在 60 秒后超时的异步函数。例如,以 5 秒的间隔在循环中发出请求,如果在 60 秒后返回。澄清一下,我想象前端每 10 秒左右向 poll 函数发出一次请求。或者,如果函数内部正在对操作进行轮询,则前端发出请求并将其保持打开状态直到请求结束。
    • 如果您在函数中进行轮询,您只会遇到 OP 描述的相同超时问题(9 分钟限制)。
    • 我没有很好地解释我的想法。我建议您定期轮询的快速解决功能,但另一个想法是,如果您的图像通常处理较早,例如
    • 谢谢。我会试一试,看看效果如何。
    猜你喜欢
    • 1970-01-01
    • 2017-09-27
    • 2017-08-05
    • 1970-01-01
    • 1970-01-01
    • 2019-09-22
    • 2020-05-18
    • 1970-01-01
    • 2020-01-25
    相关资源
    最近更新 更多