云函数是否有处理长时间运行操作的方法?

9

如果我想使用GCP云函数自动化(并行化)使用VISION API(Python3)进行图像识别,但CF有一个9分钟的硬限制。如果一张图片非常大,需要很长时间才能被识别(超过9分钟),有什么建议吗?


建议将大型图像分成较小的部分,以便在9分钟内完成每个部分的处理。可以通过递归调用云函数来实现这一点。另外,您还可以考虑使用其他服务,如Google Compute Engine或Kubernetes Engine,以获得更长的执行时间。
2个回答

4

1
这并不是很困难。你只需从函数中转而发起另一个更适合长时间运行操作的API调用即可。您可以轻松创建带有HTTP API的灵活App Engine服务,以启动一些工作。它将根据需要旋转服务器实例来执行任务。与编写大量代码让Cloud Functions执行其未预期功能相比,这种方法更具可扩展性、灵活性和成本效益。 - Doug Stevenson
有趣,但是你如何确保作业的并行化和效率? - FishingSlark
这取决于您卸载工作的服务,而不是Cloud Functions。 - Doug Stevenson

0

Cloud Vision APIs提供了API调用的异步版本,将返回作业的操作ID。

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

第二个函数将接受操作ID并检查当前状态,如果操作已完成,则返回结果。无论函数内部是否定期轮询或仅进行快速检查和立即响应取决于您以及您希望该过程如何工作。我可能会让前端显示“处理”图标,并每10秒检查一次,然后立即响应。


你不能拥有一个轮询的云函数。它们以事件驱动的方式被调用。我怀疑云视觉 API 将无法生成可触发第二个函数的事件。 - Doug Stevenson
如果您在函数中使用轮询,则会遇到与 OP(9 分钟限制)描述的相同的超时问题。 - Doug Stevenson
考虑到 Cloud Functions 的计费方式是按照函数执行的持续时间计费,因此轮询和/或保持一个实际上没有做任何事情的函数处于活动状态似乎不太划算。这种模式是无服务器后端的反模式。 - Doug Stevenson
你说得对,所以我不应该建议第二个选择。 - FridayPush
第一种选择的问题在于你无法知道工作何时结束。 - Doug Stevenson
显示剩余5条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接