Python 在云函数超时前运行5秒

Python 在云函数超时前运行5秒,python,google-cloud-platform,google-cloud-functions,Python,Google Cloud Platform,Google Cloud Functions,如果我有一个谷歌云功能,并且我部署它时有一个最大超时时间(比如说540s),我怎么能在它超时之前运行一些东西呢?例如,在超时前5秒,我想运行一个自定义行?例如: def run_something(data, context): print('Function running...') time.sleep(600) if time_left <= 5_seconds: print("Function is about to time o

如果我有一个谷歌云功能,并且我部署它时有一个最大超时时间(比如说
540s
),我怎么能在它超时之前运行一些东西呢?例如,在超时前5秒,我想运行一个自定义行?例如:

def run_something(data, context):
    print('Function running...')
    time.sleep(600)

    if time_left <= 5_seconds: 
       print("Function is about to time out in 5 seconds")
def run_something(数据、上下文):
打印('函数正在运行…')
时间。睡眠(600)
如果时间还剩
好奇等待的目的是什么?当然有更好的方法来处理这个问题,因为你需要为收到请求和发送响应之间的时间长度付费

您还可以计算它运行了多长时间以允许它执行以下操作:

start_time = time.time()
print('do_work')

while time.time() - start_time > 535:
  time.sleep(1) 

如果要跟踪超时的请求以进行进一步调查,可以在Stackdriver Logging中过滤云功能的超时请求

请注意,在Stackdriver中,超时不会报告为错误,但是您可以设置一个过滤器来过滤超时日志条目。从Google云平台控制台,转到Stackdriver日志并构建一个过滤器,如下所示,以获取超时的请求:

resource.type="cloud_function"
resource.labels.function_name="[YOUR_FUNCTION_NAME_HERE]"
"finished with status: 'timeout'"

这种想法的目的是因为我有1%的任务执行超时。我想将这些执行转移到另一个状态(内部编写器),该状态明确表示“超时”,以便我可以详细调查。现在,由于它刚刚超时,我无法捕获此异常。明白了。第二个选项更好,因为它允许在执行开始时启动时间标记。您可以通过比较差异定期检查时间,并进行相应的处理。如果您的函数中有重复代码(即,迭代一系列API调用),您可以将状态保存到数据库中,并允许新函数的执行在该函数停止的地方继续。嗯,我不确定是否得到了它。在这里你做一个while循环。如果您的内部有一个函数,并且希望监视器监视整个会话持续时间,该怎么办?如果您不从更接近实际需要的代码开始,就很难提供好的建议。我的建议达到了你的目的。云功能不是为长时间运行的进程设计的。您正在尝试最大化运行时间,而您应该最小化它。最好的设计是将您的工作分解为小任务,如果您需要重复工作,则将状态保存到持久性存储(即redis、云存储、firestore等),以便后续执行在最后一次执行结束时继续执行。您能否在任务超时时共享经过消毒的云功能代码?或者解释场景以便提供解决方法来捕获异常或其他情况?
resource.type="cloud_function"
resource.labels.function_name="[YOUR_FUNCTION_NAME_HERE]"
"finished with status: 'timeout'"