在python中执行完成之前的中间响应-与其他Cloud Function一起调用Cloud Function

时间:2019-09-14 10:44:52

标签: python google-cloud-functions

我有一个云函数在python中调用另一个云函数。我的问题是,当我调用下一个函数时,第一个函数将等待其执行或超时。

关键在于这与Google Cloud Functions有关。特别是函数超时和最大API调用率之间的不匹配。我的问题是该函数的最大超时(540秒)比我进行所需的API调用所需的时间短,并且我不想创建更多的触发器。

在调用第二个函数后,如何使第一个(“调用者”)完成? 一些示例代码:

# main.py
# url: this-particular-cloud-function

# function initiated with a post request containing {"previous_tin_index": 0}
import requests
import time
import logging

final_tin_index = 100

def eat_spam(request):
  started_eating_spam = time.time()

  spam_json = request.get_json()
  spam_to_eat = spam_json["previous_tin_index"]

  for spam in range(spam_to_eat):
    time.sleep(5)
    previous_tin_index += 1
    logging.info("I hate spam....")
    finished_previous_spam_time = time.time() - started_eating_spam

  if finished_previous_spam_time >= 10:
    logging.info("Make it stop!")
    requests.post("this-particular-cloud-function", json={"previous_tin_index": previous_tin_index})

  return "200"

编辑:我知道固有的问题是该函数永远不会达到返回值。我想知道是否可以解决此问题,例如,将代码重写为Javascript Promise。

P.S。我看过Cloud Documentation,但是在特定示例中似乎缺少python。

1 个答案:

答案 0 :(得分:0)

这可以解决您的问题。

    def f1(x):
            print('f1', x)
            return f2, (x+1,)
    def f2(x):
            print('f2', x)
            return f1, (x+1,)

    f, args = f1, (0,)
    while True:
            f, args = f(*args)

post的积分。

尽管我认为您的问题在于工作流程。您正在返回一个值,但是问题是您在代码中从未达到该点。假设您有foo1(),在foo1()内部调用foo2()。然后foo()2开始执行,但是在返回foo1()并继续直到到达return命令之前,foo1()已超时。

如果您的问题没有解决,那么问题可能在第二个功能上,因此可能需要查看此功能才能解决您的问题。

请告诉我这是否有帮助。