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

使用Azure Durable Function实现数据聚合遇TypeError问题求助

问题描述

开发Azure Function时遇到技术瓶颈,需求如下:

  • 函数通过HTTP调用,首次请求传入需接收的数据包数量等参数,返回实例ID
  • 之后额外调用n次传输每个整数数据包
  • 全部接收完成后处理数据,输出接收的整数数量

目前遇到的问题:编排器在接收任何数据前就抛出TypeError: Object of type coroutine is not JSON serializable错误,已编写客户端函数接收数据并启动编排器,但始终找不到原因。

编排器函数代码:

async def orchestrator_function(context: df.DurableOrchestrationContext):

input_data = context.get_input()
n_count = int(input_data['n_count'])
# there are some other parameters, but they are not relevant

my_data = []

for i in range(n_count):
    result = await context.wait_for_external_event("get_data")
    my_data.append(result)

total_received = len(df)

return total_received 
问题排查与解决

先修正代码中的明显笔误

编排器代码最后计算接收数量时,错误引用了未定义的df变量,应替换为存储数据的my_data:

total_received = len(my_data)  # 替换原代码的len(df)

这个错误虽不是序列化报错的直接原因,但会导致后续逻辑异常,优先修正。

序列化错误的核心排查方向

  • 客户端触发外部事件的异步处理问题
    检查客户端代码中触发外部事件的逻辑:如果调用Durable Functions的raise_event类方法时未使用await,会传递coroutine对象而非实际数据,进而引发JSON序列化失败。确保客户端调用触发事件的方法时正确等待异步操作完成。

  • 编排器输入数据的合法性
    确认首次启动编排器时传入的input_data(包含n_count等参数)是完全可JSON序列化的结构,避免字典中包含不可序列化的对象(如datetime、自定义类实例等)。可在客户端发起请求前,对输入数据做一次JSON序列化测试。

  • Durable Functions依赖包版本问题
    检查azure-functions-durable包版本,部分旧版本存在异步函数序列化的已知问题,建议升级到最新稳定版本,或回退到经过验证的兼容版本。

  • 编排器返回值的序列化检查
    当前返回的整数本身可序列化,但需确保后续逻辑扩展后返回的对象均符合JSON序列化要求,避免出现非标准类型的返回值。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 02:05:10