Tencent Cloud SDK
Tencent CloudGitHub
简体中文
简体中文
  • 欢迎
  • 常见问题
  • Python
  • 概述
  • 安装
  • 入门
  • 最佳实践
    • 无服务器云函数
      • 无服务器云函数间调用
      • 定时调用无服务器云函数
      • 原生调用无服务器云函数
        • 绑定到无服务器云函数
        • 使用例程组织无服务器云函数
    • 无服务器数据库
      • 创建和管理无服务器数据库
    • 其他 Tencent Cloud 产品
      • 选择最佳的访问凭据类型
  • API 文档
    • 无服务器云函数
      • 类和方法
        • Client 类
          • easy_invoke 方法
          • routine_invoke 方法
          • select_function 方法
          • select_routine 方法
          • bind_function 方法
          • bind_routine 方法
          • schedule_invoke 方法
          • run_schedule 方法
          • invoke 方法
          • create_function 方法
          • delete_function 方法
          • publish_function_version 方法
          • copy_function 方法
          • update_function_code 方法
          • update_function_configure 方法
          • get_function_result_by_request_id 方法
          • get_function_results 方法
          • list_functions 方法
          • list_function_versions 方法
          • get_function_info 方法
          • create_trigger 方法
          • delete_trigger 方法
          • create_namespace 方法
          • delete_namespace 方法
          • list_namespaces 方法
          • update_namespace 方法
          • get_function_code_download_url 方法
          • download_function_code 方法
          • create_layer 方法
          • delete_layer 方法
          • get_layer_info 方法
          • list_layers 方法
          • list_layer_versions 方法
          • submit_monitor_indicator 方法
        • FunctionSchedule 类
          • cancel 方法
        • FunctionResultFuture 类
          • get_request_id 方法
        • FunctionTrigger 类
          • get_trigger_kind 方法
          • get_trigger_context 方法
          • use_timer 方法
          • use_object_storage_bucket 方法
          • use_message_queue_topic 方法
        • FunctionCode 类
          • get_code_source 方法
          • get_code_context 方法
          • use_object_storage_bucket 方法
          • use_local_zip_archive 方法
          • use_git_repository 方法
        • LayerContent 类
        • fetch_client 函数
        • use_routine_dispatcher 函数
      • 数据类型
        • FunctionResult 类型
        • FunctionInfo 类型
        • FunctionInfoEx 类型
        • FunctionVersionInfo 类型
        • NamespaceInfo 类型
        • LayerInfo 类型
        • FunctionConfigure 类型
        • FunctionResultFilter 类型
        • FunctionFilter 类型
        • ObjectStorageBucketTriggerFilter 类型
        • MessageQueueTopicTriggerFilter 类型
        • LayerFilter 类型
        • FunctionRuntime 枚举器
        • FunctionType 枚举器
        • FunctionResultType 枚举器
        • FunctionTriggerKind 枚举器
        • FunctionCodeSource 枚举器
        • LayerContentSource 枚举器
        • LayerStatus 枚举器
      • 异常
        • InvokeError 异常
        • StatusError 异常
    • 无服务器数据库
      • 类和方法
        • Client 类
          • create_instance 方法
          • delete_instance 方法
          • list_instances 方法
          • set_instance_extranet 方法
        • fetch_client 函数
      • 数据类型
        • InstanceInfo 类型
        • InstanceConfigure 类型
        • DatabaseCharset 枚举器
    • 其他 Tencent Cloud 产品
      • 类和方法
        • Waitable 类
          • wait_for_done 方法
          • has_done 方法
          • set_result 方法
        • ErrorManager 类
          • add_handler 方法
          • remove_handler 方法
          • has_handler 方法
          • clear_all_handler 方法
        • UniversalClient 类
          • action 方法
          • action_for_product 方法
          • select_action 方法
          • get_product_id 方法
          • set_product_id 方法
          • set_access_endpoint 方法
          • set_access_proxies 方法
          • get_last_response_metadata 方法
        • Proxies 类
          • use_proxy_server 方法
          • add_proxy_server 方法
          • remove_proxy_server 方法
      • 数据类型
        • ResponseMetadata 类型
        • ProxyAuth 类型
        • ProxyType 枚举器
        • ErrorHandlerResult 枚举器
        • WaitableStatus 枚举器
      • 异常
        • Error 异常
        • NotFoundError 异常
        • ExistedError 异常
        • OccupiedError 异常
        • ClientError 异常
        • RequestError 异常
        • ResponseError 异常
        • ActionError 异常
        • ActionResultError 异常
  • GitHub 存储库
  • Issues 跟踪器
  • PyPI 项目主页
由 GitBook 提供支持
在本页
  • 概述
  • 指导
  • 无服务器云函数
  • 本地函数

这有帮助吗?

导出为 PDF
  1. 最佳实践
  2. 无服务器云函数
  3. 原生调用无服务器云函数

使用例程组织无服务器云函数

本文将向您进一步介绍并演示借助 Tencent Cloud SDK for Python 如何为无服务器云函数创建多个例程并调用它们,这是绑定到无服务器云函数的进阶。

上一页绑定到无服务器云函数下一页无服务器数据库

最后更新于5年前

这有帮助吗?

概述

这是由 Tencent Cloud SDK for Python 的无服务器云函数产品客户端所提供的高级特性,如果您未曾阅读如何将一个无服务器云函数绑定到 Python 原生同步或异步函数的实践文档,请先阅读:

在上一篇最佳实践中我们得知借助 Tencent Cloud SDK for Python 可以快速实现将一个或多个 Python 原生的同步或异步函数绑定到指定的无服务器云函数,进而以完全 Python 原生调用的形态组织代码以屏蔽或减少开发者对无服务器云函数调用时的 RPC 流程感知。

遗憾的是,该高级特性仅适用于无服务器云函数调用方,而被调用的无服务器云函数依旧需要以传统事件处理的方式组织一个或多个功能的代码实现。当我们在一个无服务器云函数中提供的相关功能较多时,开发者还需要在无服务器云函数执行方法中实现事件解析和派发。

因此,Tencent Cloud SDK for Python 通过提供另外一种高级特性以解决这些问题,我们将其称之为适用于无服务器云函数集成调用的例程派发框架,简称无服务器云函数例程。

与绑定到无服务器云函数的高级特性相同,无服务器云函数例程特性也使用 Python 高级特性装饰器实现,这意味着开发者可以以更简洁、美观的代码快速集成该特性。

没有理解?没关系,在下文中我们将通过几个简单的应用场景向您进一步说明如何使用无服务器云函数例程特性组成您的应用程序代码逻辑。

指导

在下文中我们将列举几段连续的示例代码并向您介绍 Tencent Cloud SDK for Python 所提供的无服务器云函数例程特性的工作流程。

假定我们需要在一个无服务器云函数中实现对加法和减法的算术运算:

无服务器云函数

创建函数

首先我们需要创建一个名为 arithmetic 的无服务器云函数:

属性

值

数据中心

ap-shanghai

命名空间

default

函数名称

arithmetic

运行环境

Python 3.6

编写代码

然后,我们需要为无服务器云函数 arithmetic 编写代码。与以往不同,我们将使用 Tencent Cloud SDK for Python 提供的无服务器云函数例程特性和框架。首先我们需要导入使用的命名空间和模块:

from tencent.cloud.serverless import functions

接着我们需要调用 use_routine_dispatcher 函数为当前无服务器云函数启用例程派发器框架:

dispatcher = functions.use_routine_dispatcher()

在上述代码中,我们得到一个被称之为例程派发器类型的实例并由变量 dispatcher 存储。例程派发器实际上是一个可解析无服务器云函数例程调用协议的路由,每一个例程派发器实例将管理一个或多个已注册的无服务器云函数例程。没有理解?没关系,让我们继续向下阅读。

然后我们需要编写 2 个例程,分别是 addend 和 subtract,分别对应加法和减法的算术运算:

@dispatcher.routine
def addend(
    value1: int,
    value2: int
) -> int:
    return value1 + value2

@dispatcher.routine
def subtract(
    value1: int,
    value2: int
) -> int:
    return value1 - value2

或许您已经注意到,无服务器云函数例程实际上是一个套用例程派发装饰器的一个 Python 原生函数,在上述代码中我们仅需要为 Python 原生函数使用 @dispatcher.routine 装饰器即可将其注册为可调用的无服务器云函数例程。

到此,无服务器云函数 arithmetic 的代码已完成编写。

本地函数

编写代码

在上文中我们已经创建名为 arithmetic 的无服务器云函数,并分别实现适用于加法和减法算术运算的无服务器云函数例程,现在让我们在一个本地函数中调用它们:

首先,我们需要导入所依赖的命名空间和模块:

from tencent.cloud.serverless import functions

接着,我们需要在本地函数的 Python 模块全局获取一个无服务器云函数产品客户端实例:

function_client = functions.fetch_client()

然后,我们需要为无服务器云函数的 addend 和 subtract 分别创建 2 个 Python 原生函数,并将他们分别绑定到对应的无服务器云函数例程:

@function_client.bind_routine('ap-shanghai', 'default', 'arithmetic')
def addend(
    value1: int,
    value2: int
) -> int:
    raise NotImplementedError

@function_client.bind_routine('ap-shanghai', 'default', 'arithmetic')
def subtract(
    value1: int,
    value2: int
) -> int:
    raise NotImplementedError

是的,对无服务器云函数例程的绑定与对无服务器云函数的绑定非常相似。

我们仅需要定义 2 个与无服务器云函数例程签名完全一致的 Python 原生函数,然后为其分别套用 @function_client.bind_routine 装饰器即可。现在对 Python 原生函数 addend 和 subtract 的调用等同于对无服务器云函数 arithmetic 的例程 addend 和 subtract 的调用。

值得注意的是,我们将这些与无服务器云函数例程签名相同的 Python 函数称之为 Python 原生扮演函数。

当然,如果您不希望在应用程序中为每一个无服务器云函数例程编写对应的 Python 原生函数,您可以选择由 Tencent Cloud SDK for Python 代您创建一个与指定无服务器云函数例程相关联的 Python 原生函数:

addend = function_client.seletc_routine('ap-shanghai', 'default',
    'arithmetic', 'addend')
    
subtract = function_client.seletc_routine('ap-shanghai', 'default',
    'arithmetic', 'subtract')

现在,变量 addend 和 subtract 为可调用的 Python 原生函数对象。

调用例程

最后,我们尝试在本地函数中调用无服务器云函数 arithmetic 的例程 addend 和 subtract,并打印输出加法和减法算术运算的结果:

print(addend(10, 20))
print(subtract(30, 20))

请注意,如果您使用方法 seletc_routine 创建无服务器云函数例程的 Python 原生扮演函数,您需要完全使用关键字参数调用,否则 Tencent Cloud SDK for Python 无法确定每个参数对应的位置:

print(addend(
    value1 = 10,
    value2 = 20
))

print(subtract(
    value1 = 30,
    value2 = 20
))

如果您希望在调用无服务器云函数例程时获得 RPC 流程感知,您可以使用方法 routine_invoke :

打印输出

如果一切正常,您将会在终端看到如下输出:

30
10
绑定到无服务器云函数
什么是 Python 装饰器?
bind_routine 方法
select_routine 方法
routine_invoke 方法