详情页标题前

腾讯云云函数(SCF)异步执行事件管理-云淘科技

详情页1

对于异步执行事件管理,SCF 提供了获取异步事件列表及状态、终止函数异步事件功能。注意本文涉及功能仅支持 异步执行 函数。

获取异步事件列表及状态

异步执行函数事件有以下四种运行状态:运行中:事件异步执行中。调用完成:事件异步执行成功,正常返回。调用失败:事件异步执行失败,异常返回。调用终止:用户主动对运行中的事件发起终止,异步执行停止并返回。

相关接口

API 接口 说明 相关文档
ListAsyncEvents 异步执行函数事件信息数据列表,提供根据事件 RequestId、函数名、函数版本、事件状态、事件调用/结束时间等条件对异步执行事件信息的查询功能。仅可查询数据范围为开启事件追踪后3天内数据。 拉取函数异步事件列表
GetAsyncEventStatus 提供根据请求 RequestId 获取异步事件执行状态的功能,事件状态保留3 * 24小时(从事件结束开始计时)。 获取函数异步事件状态

注意:使用时请关注各 API 的频率限制,获取异步事件列表接口ListAsyncEvents不建议高频调用,如需查询异步事件执行结果,请使用获取函数异步事件状态GetAsyncEventStatus接口。

终止函数异步事件

SCF 提供终止调用发送终止信号两种异步事件终止方式,区别和使用方式如下:

相关接口

API 接口 说明 相关文档
TerminateAsyncEvent 异步执行函数通过调用返回的事件 RequestId,对运行中异步执行事件下发终止指令,终止完成后返回。本接口默认行为是终止调用,参数 GraceShutdown 为 True 时向请求发送 SIGTERM 终止信号,可在函数内部对该信号进行监听并自定义信号处理逻辑。 终止正在运行中的函数异步事件

终止调用

在调用函数时,SCF 会分配一个实例处理函数请求或事件。函数代码运行完毕返回后,该实例会处理其他请求。如果在请求到来时,所有实例都在运行中,云函数则会分配一个新的实例。(更多实例相关信息请参考 并发概述)当异步执行函数事件接收到终止调用后,SCF 会强制停止实例运行,并回收该实例,下一次请求到来时,如无空闲实例,SCF 会分配一个新的实例来处理请求。适用场景异步执行函数运行异常、死循环等需要提前中断函数执行的场景。注意事项终止调用会强制停止实例并触发实例回收,这意味着实例中缓存的信息将无法正常获取(比如 /tmp 目录下的文件)。如需使用该功能,请及时将实例中缓存的问题写入其他持久化存储介质,避免实例回收后文件丢失。

发送终止信号

当调用终止函数异步事件 API 并指定 GraceShutdown参数为 True时,SCF 将会向 API 入参中指定的事件发送一个终止信号,该信号固定为 SIGTERM,可在函数中监听该信号并自定义接收到信号后的处理逻辑,包括但不限于停止函数执行。当异步执行函数事件接收到 SIGTERM 信号后:如果函数代码中监听并定义了信号处理函数,会开始执行对应的信号处理函数逻辑;如果函数代码中没有监听信号,函数进程会退出,并返回 439 错误码(用户进程退出 User process exit when running)。SCF 会将事件的信号接收情况记录进函数执行日志中:信号接收成功:日志中将记录 [PLATFORM] Signal received successfully.信号接收失败:日志中将记录 [PLATFORM] Signal reception failed.

适用场景

在函数执行过程中,由于业务需要而停止函数运行,并在函数停止运行前自定义处理逻辑。

使用方法

下文以监听到 SIGTERM 信号后通过自定义信号处理函数终止函数运行为例:

代码部署

PythonGolang

# -*- coding: utf8 -*-import timeimport signal
class GracefulKiller: kill_now = False def __init__(self): # Register signal processing function signal.signal(signal.SIGTERM, self.graceshutdown) def graceshutdown(self, *agrg): print("do something before shutdown.") self.kill_now = True
def main_handler(event, context): killer = GracefulKiller()
while not killer.kill_now: time.sleep(1) print(killer.kill_now)
print("Graceful shutdown.") return("END")
package main
import ( "context" "fmt" "log" "os" "os/signal" "syscall" "time"
"github.com/tencentyun/scf-go-lib/cloudfunction")
type DefineEvent struct { // test event define Key1 string `json:"key1"` Key2 string `json:"key2"`}
func hello(ctx context.Context, event DefineEvent) (string, error) { go graceshutdown() sleepNum := 0 for { 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 := <-sigs log.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 Function cloudfunction.Start(hello)}

镜像部署

Python

# -*- coding: utf8 -*-from flask import Flask, requestimport timeimport signalapp = Flask(__name__)
class GracefulKiller: kill_now = False def __init__(self): # Register signal processing function signal.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)



官网1折活动,限时活动,即将结束,速速收藏
同尘科技腾讯云授权服务中心。
购买腾讯云产品享受折上折,更有现金返利。同意关联立享优惠

转转请注明出处:https://www.yunxiaoer.com/149504.html

(0)
上一篇 2023年12月9日 下午1:20
下一篇 2023年12月9日 下午1:20
详情页2

相关推荐

  • 腾讯云云函数(SCF)在线视频行业案例-云淘科技

    客户介绍 国内某在线视频媒体平台是以视听互动为核心,集网络特色与电视特色与一体,实现 “多屏合一”,独播、跨屏、自制的新媒体视听综合传播服务平台,也是国内 A 股中最早国有控股的视频平台之一。 业务需求 需求1:音视频编解码业务 音视频团队承担的主要业务有:自有内容音视频输出:每天海量时长的源视频内容生产240P 到 4K 等不同清晰度,超50多种格式的转码…

    2023年12月9日
  • 阿里云RDS数据库创建账号和数据库-云淘科技

    若要使用云数据库RDS,您需要在实例中创建账号和数据库。本文介绍如何为RDS PostgreSQL实例创建账号和数据库。 账号类型 RDS PostgreSQL实例支持两种数据库账号:高权限账号和普通账号。详细说明如下。 账号类型 说明 高权限账号 只能通过控制台或API创建和管理。 可以创建多个高权限账号,管理所有普通账号和数据库。 开放了更多权限,可满足…

    2023年12月9日
  • 信息流广告,信息流部分建议宽度830px,只针对默认列表样式,顺序随机
  • 腾讯云云点播如何通过 Web 上传视频

    使用须知 Demo 功能介绍 本 Demo 向开发者展示如何通过 Web 页面将视频上传到云点播。Demo 基于云函数(SCF)搭建了两个 HTTP 服务:第一个服务用于接收来自浏览器获取 客户端上传签名 的请求,计算上传签名并返回。第二个服务使用 VOD Web 上传 SDK 实现一个页面,用户可以通过浏览器访问该页面,并上传本地视频到 VOD。 架构和流…

    2023年12月9日
  • 腾讯云Serverless SSR持续构建-云淘

    功能介绍 Serverless SSR 支持用户通过代码托管实现应用的持续构建,您可以按需选择您的代码仓库,并配置构建计划运行的触发规则。目前,Serverless SSR 支持 GitHub、GitLab、Gitee 代码源,您可以授权后直接拉取代码仓库信息,也可以填入公开的自定义仓库完成部署。 触发规则介绍 Serverless SSR 支持您选择需要的…

    2023年12月9日
  • 阿里云大数据开发治理平台 DataWorks公网流量计费说明-云淘科技

    数据集成任务运行在公共资源组和独享资源时,在数据传输过程中如果产生了公网流量,会按量收取公网流量费用。本文为您介绍数据集成公网流量计费详情。 流量费用产生原则 若DataWorks上的数据源配置了公网地址,则基于该数据源配置的任务执行时将产生公网流量费。您可进入运维中心 > 运维大屏,在数据集成页签的同步任务执行详情区域,通过是否有公网流量过滤,确认产…

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信
本站为广大会员提供阿里云、腾讯云、华为云、百度云等一线大厂的购买,续费优惠,保证底价,买贵退差。