我有一个云函数在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。
答案 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()已超时。
如果您的问题没有解决,那么问题可能在第二个功能上,因此可能需要查看此功能才能解决您的问题。
请告诉我这是否有帮助。