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

Azure Functions Python环境下如何流式返回ND-JSON?

Azure Functions Python 实现ND-JSON流式返回方案

你完全可以用Azure Functions原生能力实现ND-JSON流式返回,不需要依赖第三方框架或复杂编排,核心是利用func.HttpResponse的stream=True参数配合字节流生成器。

实现步骤与代码示例

1. 定义ND-JSON生成器

编写生成器函数,逐行生成编码为字节的ND-JSON内容:

import json
import azure.functions as func

def generate_ndjson_stream():
    # 替换为你的实际数据生成逻辑(比如迭代数据库结果、读取大文件等)
    for item_id in range(1000):
        # 构造单条JSON数据,转为字符串后编码为字节,添加换行符符合ND-JSON规范
        yield json.dumps({"id": item_id, "content": f"stream_item_{item_id}"}).encode("utf-8") + b"\n"

2. 返回流式HttpResponse

在函数入口中,将生成器传入func.HttpResponse并开启流式模式:

def main(req: func.HttpRequest) -> func.HttpResponse:
    return func.HttpResponse(
        generate_ndjson_stream(),
        mimetype="application/x-ndjson",
        headers={"Transfer-Encoding": "chunked"},
        stream=True
    )

关键说明

  • stream=True:开启流式传输,Azure Functions会逐块发送生成器产生的内容,而非一次性加载全部数据到内存
  • 字节流输出:当开启流式模式时,func.HttpResponse支持接收可迭代的字节对象,因此每个生成的ND-JSON行需要编码为bytes类型
  • 响应头配置:
    • application/x-ndjson:明确告知客户端响应格式为ND-JSON
    • Transfer-Encoding: chunked:标记响应为分块传输,让客户端可以逐行消费

注意事项

  • 生成器逻辑需避免一次性加载全量数据,确保真正实现流式内存优化
  • 测试时建议使用支持分块传输的客户端(如curl命令行工具),部分GUI客户端可能会缓存完整响应后再展示
  • 如果从外部数据源(如数据库)获取数据,直接迭代查询结果即可,无需提前将所有数据读入内存

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 04:37:13