You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将列表传递至Azure Durable Functions并调用activity函数

Azure Durable Functions Python 传参与配置问题解答

如何将listcreator()生成的字符串列表传递给orchestrator

你不需要额外引入中间存储、全局变量这类不可靠的传递方式,直接通过Durable客户端启动编排实例的入参传递即可,步骤如下:

  • 修改现有HTTP触发的listcreator函数,添加Durable客户端输入绑定,在函数内生成目标列表后,调用编排启动方法时将列表作为入参传入
  • orchestrator函数通过上下文对象直接获取传入的列表,即可循环/批量调用activity函数

对应代码参考:

修改后的listcreator代码

import azure.functions as func
import azure.durable_functions as df

async def main(req: func.HttpRequest, starter: str) -> func.HttpResponse:
    client = df.DurableOrchestrationClient(starter)
    # 原有生成列表的逻辑,修正拼写错误
    mylist = ['hello', 'world']
    # 启动编排函数,将列表作为输入传入,将参数替换为你实际的编排函数名
    instance_id = await client.start_new(
        orchestration_function_name="your_orchestrator_func_name",
        client_inputs=mylist
    )
    # 返回编排实例状态查询响应
    return client.create_check_status_response(req, instance_id)

对应orchestrator接收参数、调用activity的代码

import azure.durable_functions as df

def orchestrator_function(context: df.DurableOrchestrationContext):
    # 直接获取listcreator传入的列表
    input_list = context.get_input()
    task_list = []
    # 遍历列表批量调用activity,支持并行执行
    for item in input_list:
        task_list.append(context.call_activity("activity", item))
    # 等待所有activity执行完成,汇总结果
    final_results = yield context.task_all(task_list)
    return final_results

main = df.Orchestrator.create(orchestrator_function)

listcreator对应的function.json绑定配置

需要在原有HTTP触发绑定基础上,新增Durable客户端的输入绑定,配置示例:

{
  "scriptFile": "__init__.py",
  "bindings": [
    {
      "authLevel": "anonymous",
      "type": "httpTrigger",
      "direction": "in",
      "name": "req",
      "methods": ["get", "post"]
    },
    {
      "type": "http",
      "direction": "out",
      "name": "$return"
    },
    {
      "name": "starter",
      "type": "durableClient",
      "direction": "in"
    }
  ]
}

注意:不要用全局变量、本地临时文件的方式传递列表。Durable Functions编排存在重放机制,可能在不同进程、不同计算节点上运行,这类本地存储的内容无法被可靠读取,通过启动入参传递的内容会被持久化到Durable Functions的后端存储中,重放时可以稳定获取。


是否需要单独配置starter函数

不需要额外编写独立的starter函数。
starter的核心作用是持有Durable客户端实例、触发编排启动,HTTP触发、队列触发、Blob触发等任意类型的函数,只要配置了durableClient输入绑定,都可以作为starter使用。你现有已经实现了列表生成逻辑的listcreator,加上Durable客户端绑定后就可以直接承担starter的职责,不需要冗余新增单独的启动函数。


内容的提问来源于stack exchange,提问作者Stijn Koordijk

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 13:21:21