Flask创建流式返回的mock脚本

需求:对接口api/mocktest 接口进行流式返回的mock,其中要求接口请求方式为:api/mocktest/{first_time}/{total_time},first_time为首token耗时、total_time为流式返回总耗时

python 复制代码
import sys
from flask import Flask, Response, request
import json
import time

app = Flask(__name__)

@app.route("/api/mocktest/<int:first_time>/<int:total_time>", methods=["POST"])
def process(first_time, total_time):
    if first_time >= total_time:
        return Response(json.dumps({"error": "First time is greater than total time"}), status=400)

    """
    /api接口定义,动态获取first token time和complete response time
    """
    stream = request.json.get("stream")
    stream_num = 10
    # 根据请求参数计算平均时间
    avg_time = (total_time - first_time) / (stream_num - 1)
    # 初始化流式数据
    mock_stream_data = [[json.dumps({"data": "this is a stream mock1", "status": 0}), first_time]]
    for i in range(2, stream_num + 1):
        res = [json.dumps({"data": "this is a stream mock" + str(i), "status": 0}), avg_time]
        mock_stream_data.append(res)

    # 初始化非流式数据
    no_stream_time = first_time
    mock_nostream_data = [
        [json.dumps({"data": "this is a nostream mock", "status": 0}), no_stream_time]
    ]

    def generate_stream():
        """
        流式返回数据
        """
        for each in mock_stream_data:
            v = each[0]
            t = each[1]
            if t > 0:
                time.sleep(t)  # 等待指定的时间后再发送下一条数据
            yield v + "\r\n"
            sys.stdout.flush()

    def generate_nostream():
        """
        非流式返回数据
        """
        v = mock_nostream_data[0][0]
        t = mock_nostream_data[0][1]
        if t > 0:
            time.sleep(t)
        yield v + "\r\n"

    if stream:
        return Response(generate_stream(), mimetype="text/plain")
    else:
        return Response(generate_nostream(), mimetype="text/plain")

app.run()

python运行后通过curl命令访问地址:

流式请求:

bash 复制代码
curl --location '127.0.0.1:5000/api/mocktest/3/10' \
--header 'Content-Type: application/json' \
--data '{
    "messages": [{"role": "user", "content": "发起请求"}],
    "stream": true
}'

结果:

非流式请求:

bash 复制代码
curl --location '127.0.0.1:5000/api/mocktest/3/10' \
--header 'Content-Type: application/json' \
--data '{
    "messages": [{"role": "user", "content": "发起请求"}],
    "stream": false
}'

结果:

相关推荐
yejqvow121 分钟前
php怎么调用字节跳动AI商品推荐_php如何基于用户行为生成千人千面
jvm·数据库·python
坐吃山猪3 分钟前
MFlow03-数据模型解析
开发语言·python·源码·agent·记忆
weixin_568996067 分钟前
HTML怎么离线使用_HTML缓存策略基础配置【教程】
jvm·数据库·python
Ulyanov9 分钟前
《玩转QT Designer Studio:从设计到实战》 QT Designer Studio动画与动效系统深度解析
开发语言·python·qt·系统仿真·雷达电子对抗仿真
2301_7735536211 分钟前
怎么删除MongoDB中不再使用的账号
jvm·数据库·python
qq_3422958213 分钟前
SQL报表星型模型优化_事实表索引设计
jvm·数据库·python
u01091476016 分钟前
SQL优化多表关联中的字符串连接字段_建立前缀索引提升JOIN
jvm·数据库·python
余衫马19 分钟前
在 Windows 服务中托管 ASP.NET Core Web API (.net6)
运维·windows·后端·asp.net·.net
2301_7775993720 分钟前
Oracle环境下的设置主键与自增列指南_特定语法与可视化配置
jvm·数据库·python
a95114164221 分钟前
Golang怎么用go get添加依赖_Golang如何在项目中引入第三方库【入门】
jvm·数据库·python