API 接口 | 说明 | 相关文档 |
ListAsyncEvents | 异步执行函数事件信息数据列表,提供根据事件 RequestId、函数名、函数版本、事件状态、事件调用/结束时间等条件对异步执行事件信息的查询功能。 仅可查询数据范围为开启事件追踪后3天内数据。 | |
GetAsyncEventStatus | 提供根据请求 RequestId 获取异步事件执行状态的功能,事件状态保留3 * 24小时(从事件结束开始计时)。 | 获取函数异步事件状态 |
ListAsyncEvents
不建议高频调用,如需查询异步事件执行结果,请使用获取函数异步事件状态GetAsyncEventStatus
接口。API 接口 | 说明 | 相关文档 |
TerminateAsyncEvent | 异步执行函数通过调用返回的事件 RequestId,对运行中异步执行事件下发终止指令,终止完成后返回。本接口默认行为是终止调用,参数 GraceShutdown 为 True 时向请求发送 SIGTERM 终止信号,可在函数内部对该信号进行监听并自定义信号处理逻辑。 |
GraceShutdown
参数为 True
时,SCF 将会向 API 入参中指定的事件发送一个终止信号,该信号固定为 SIGTERM
,可在函数中监听该信号并自定义接收到信号后的处理逻辑,包括但不限于停止函数执行。SIGTERM
信号后:User process exit when running
)。SIGTERM
信号后通过自定义信号处理函数终止函数运行为例:# -*- coding: utf8 -*-import timeimport signalclass GracefulKiller:kill_now = Falsedef __init__(self):# Register signal processing functionsignal.signal(signal.SIGTERM, self.graceshutdown)def graceshutdown(self, *agrg):print("do something before shutdown.")self.kill_now = Truedef main_handler(event, context):killer = GracefulKiller()while not killer.kill_now:time.sleep(1)print(killer.kill_now)print("Graceful shutdown.")return("END")
package mainimport ("context""fmt""log""os""os/signal""syscall""time""github.com/tencentyun/scf-go-lib/cloudfunction")type DefineEvent struct {// test event defineKey1 string `json:"key1"`Key2 string `json:"key2"`}func hello(ctx context.Context, event DefineEvent) (string, error) {go graceshutdown()sleepNum := 0for {sleepNum++fmt.Println("sleep:", sleepNum)time.Sleep(time.Second)}}// Register signal processing functionfunc graceshutdown() {sigs := make(chan os.Signal, 1)signal.Notify(sigs, syscall.SIGTERM)sig := <-sigslog.Printf("receive signal %s", sig.String())//do something before shutdown.os.Exit(0)}func main() {// Make the handler available for Remote Procedure Call by Cloud Functioncloudfunction.Start(hello)}
# -*- coding: utf8 -*-from flask import Flask, requestimport timeimport signalapp = Flask(__name__)class GracefulKiller:kill_now = Falsedef __init__(self):# Register signal processing functionsignal.signal(signal.SIGTERM, self.graceshutdown)def graceshutdown(self, *agrg):print("do something before shutdown.")self.kill_now = True@app.route('/event-invoke', methods = ['POST'])def invoke():while not killer.kill_now:time.sleep(1)print(killer.kill_now)print("Graceful shutdown.")return("END")if __name__ == '__main__':killer = GracefulKiller()app.run(host='0.0.0.0', port=9000)
本页内容是否解决了您的问题?