【问题标题】:run 2 Python Cloud Functions in same script在同一脚本中运行 2 个 Python 云函数
【发布时间】:2021-09-27 11:04:24
【问题描述】:

我有一个包含 2 个云函数的脚本,比如说 Fn1 和 Fn2。 Fn1 是事件驱动的,获取存储对象的 uri,Fn2 需要从 Fn1 中获取 uri 并将其用作输入。 我已经独立测试过 Fn1 和 Fn2 并且它们可以工作。

我需要的是如何同时运行这两个函数,以便Fn1获取所需的信息并将其传递给Fn2执行并提供最终输出。

def fn1(a,b):
    value = '{}.'format(a['x'])
    return value

def fn2(value):
    do work
    output = final

1.) 我希望能够在一个云函数中部署这两个函数(或者可能是 2 个)。

2.) 我希望能够让 Fn1 由事件触发(已解决,工作正常),但在完成时调用 Fn2 并让 Fn2 输出最终结果。

您可能已经注意到,我在 Python 采用方面处于早期阶段,因此目前能力不是很好,但学习速度很快。

【问题讨论】:

  • 我没有发现 fn2 是否需要由事件调用(包括 HTTP 请求,我的意思是部署为云函数),或者 fn2 是否仅由 fn1 “内部”调用在你的代码中。你能详细说明这部分吗?
  • @guillaume blaquiere,谢谢先生回答这个问题。 fn2 将在代码内部,并且只会被 fn1 调用。 fn1 将使用 google.storage.object.finalize 触发事件。 fn1 获取上传对象的 url,然后调用 fn2 (Vision API) 来处理所述对象,提供返回的 url 作为输入。听起来微不足道,但对于我这样的新手来说,却让我对生命的意义产生了疑问! :)

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


【解决方案1】:

您没有指定如何触发这些函数 (http/pubsub)...

我有一个从 HTTP 触发的 http 函数,但在有效负载中我定义了脚本应该做什么。

这是它的一个小sn-p:

# to run locally:
# FLASK_ENV=development FLASK_APP=main flask run
# and uncomment the following:
from flask import Flask, request

app = Flask(__name__)
@app.route('/', methods=['POST'])
def wrapper():
    return main(request)

主要功能是这样的:

def main(args=None):
    action = args.form['action'] #simplified because I use it together with argparse 

    match action:
        case 'task1':
            ...

这也可以用 pubsub 来完成,你可以使用 pubsub 属性来定义函数应该做什么动作。

你不能从 http 和 pubsub 触发相同的功能。

至于第二个问题,您有 GCP 工作流或 GCP 作曲家,但这些产品对于您正在尝试做的事情来说可能是多余的。

【讨论】:

  • 感谢您对此进行调查并提供响应,第一个函数由存储事件“finalize”触发。上传对象后,一旦完成,该功能将被触发。我知道我可以指定一个在 fn1 中返回的值,然后从 fn1 调用 fn2,将返回的值作为输入传递给 fn2。我希望这样,存储事件触发器将运行 fn1 和 fn2。
  • 是的,您可以在函数中调用函数。从 python SDK 你可以触发 func2 googleapis.dev/python/cloudfunctions/latest/functions_v1/…
【解决方案2】:

云函数意味着您在部署期间只公开一个函数。但是,在您的代码中,您可以有多个函数、类、文件、对象、(...),这没有问题。唯一的条件是:代码中只有一个入口点。

因此,您可以做类似的事情

def fn3(c):
  do.other.things(c)

def fn2(e):
  do.something(e)

def fn1(event, context):
  doFn2(event)
  doFn3(context)
  print("end")

使用--entry-point=fn1 参数进行部署,以指定要调用的第一个函数,然后围绕您构建工作负载。

【讨论】:

    猜你喜欢
    • 2018-06-16
    • 2020-09-26
    • 1970-01-01
    • 1970-01-01
    • 2018-11-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多