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 提供支持
在本页
  • 概述
  • 场景
  • 设定
  • 要求
  • 指导
  • 编写 Python 脚本
  • 运行
  • 探究

这有帮助吗?

导出为 PDF
  1. 最佳实践
  2. 无服务器云函数

原生调用无服务器云函数

本文将向您介绍并演示借助 Tencent Cloud SDK for Python 如何以 Python 原生函数的形式调用指定无服务器云函数。

概述

当我们谈论到如何使用 Tencent Cloud SDK for Python 调用无服务器云函数时,或许首先想到的是利用无服务器云函数产品客户端所提供的 invoke、easy_invoke 或 schedule_invoke 等实例方法快速发起对指定无服务器云函数的调用并获得运行结果。

但除此之外,我们还可以借助 Tencent Cloud SDK for Python 的无服务器云函数产品客户端所提供的高级特性以 Python 原生函数的形式调用指定无服务器云函数。

通常情况下我们在当前运行环境中对无服务器云函数的调用过程或许都可以被称之为 RPC(远程过程调用),开发者可以感知到 RPC 过程的存在。例如我们使用无服务器云函数产品客户端所提供的 easy_invoke 实例方法调用指定无服务器云函数时,我们可以感知到这是一次调用请求。

通过利用 Tencent Cloud SDK for Python 的无服务器云函数产品客户端所提供的 Python 原生调用高级特性,我们可以将对无服务器云函数的调用封装为对一个 Python 原生函数的调用。这样当开发者对相关联的 Python 原生函数调用时等同于对指定无服务器云函数的调用,从而屏蔽 RPC 过程感知。

没有理解?没关系,在下文中我们将通过一个简单的场景介绍并演示如何使用该高级特性。

场景

设定

假定我们在数据中心 ap-shanghai 的命名空间 default 拥有一个已创建就绪的无服务器云函数 addend,其无服务器云函数的配置为:

配置

值

运行环境

Python 3.6

内存上限

64 MBytes

入口函数

index.main

运行角色

QCS_SCFExcuteRole

其无服务器云函数的源代码为:

def main(
    event: dict,
    context: dict
) -> int:
    try:
        return event['value1'] + event['value2']
    except KeyError as error:
        raise ValueError('event missing field: ' + str(error))

要求

在该场景中,我们要求在本地 Python 脚本中实现对无服务器云函数 addend 的调用,传入函数事件字段 value1 和 value2 并获得实际返回值。

其调用必须以 Python 原生函数的形式呈现。

指导

在下文中,我们将通过几个步骤向您演示编写符合当前场景要求的代码示例:

编写 Python 脚本

导入模块

首先,我们需要导入依赖的 Tencent Cloud SDK for Python 的命名空间和模块:

from tencent.cloud.auth import credentials
from tencent.cloud.serverless import functions

入口函数

接着,我们需要为 Python 脚本编写入口函数,所有代码逻辑将在该函数中实现。

def main():
    # Instantiate a serverless cloud function product client
    function_client: functions.Client = functions.Client(
        # Instantiate an access credential
        access_credentials = credentials.Credentials(
            secret_id = 'AKIDF3sMOAU1pOgkmrKHchX6TZQ1Mo1C5qa7',
            secret_key = 'b4JL8fwxkIgsKMXGi39yYt0ECxZw4wZf'
        )
    )

    # Select a serverless cloud function and get a
    # corresponding Python native function.
    addend = function_client.select_function(
        region_id = 'ap-shanghai',
        namespace_name = 'default',
        function_name = 'addend'
    )
    
    # Calling Python native functions and getting results
    addition_result: int = addend(
        value1 = 10,
        value2 = 20
    )
    
    # Print function actual return value
    print('info: addition result: ' + str(addition_result))

在上文示例代码中,我们首先实例化一个无服务器云函数产品客户端和访问凭据;接着使用无服务器云函数产品客户端的实例方法 select_function 选择一个无服务器云函数并获得与之对应的 Python 原生函数 addend;最后调用 Python 原生函数 addend 并打印输出无服务器云函数 addend 的实际返回值。

在获得的 Python 原生函数 addend 内部,其将调用与之关联的无服务器云函数产品客户端的实例方法 easy_invoke 实现对指定无服务器云函数的调用。

请注意,对关联无服务器云函数的 Python 原生函数调用时其参数必须完全使用关键字参数传递,参数名即为指定无服务器云函数运行时事件的字段名称,否则行为是未定义的。

在上文示例代码中所涉及的 API 如下:

运行

最后,我们尝试运行本地 Python 脚本,如果一切正常将输出:

info: addition result: 30

探究

或许您已经注意到,使用 Tencent Cloud SDK for Python 的无服务器云函数产品客户端的实例方法 select_function 所获得的关联 Python 原生函数无法使用顺序参数,且无法与类方法、类实例方法相结合并获得 IDE 所提供的引导提示。

如果您希望以类方法、类实例方法或函数的形式以可控的函数或方法签名组成您的代码,或许使用 Tencent Cloud SDK for Python 的无服务器云函数客户端所提供的另一项高级特性更加合适:

上一页定时调用无服务器云函数下一页绑定到无服务器云函数

最后更新于5年前

这有帮助吗?

Client 类
select_function 方法
绑定到无服务器云函数