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

Django WebSocket如何同时接收并处理两个ChatGPT请求?

问题原因及解决方案

问题根源

你当前代码中使用的是OpenAI同步SDK,openai.ChatCompletion.create()是同步阻塞调用,会占用整个async事件循环,导致第二个请求必须等第一个请求的同步任务完全结束后才能执行,因此出现了串行执行的日志。

解决步骤

要实现并行处理,必须改用OpenAI的异步客户端,确保所有IO操作都是非阻塞的,让事件循环可以同时处理多个任务。

修改后的代码

import json
import asyncio
from openai import AsyncOpenAI
from channels.generic.websocket import AsyncWebsocketConsumer

class GPTAPIConsumer(AsyncWebsocketConsumer):
    # 初始化异步OpenAI客户端
    client = AsyncOpenAI(api_key="你的API密钥")

    async def connect(self):
        await self.accept()

    async def receive(self, text_data):
        data = json.loads(text_data)
        print('Start', data['requestID'])
        # 创建异步任务提交到事件循环,不阻塞后续请求处理
        asyncio.create_task(self.streamToClient(data['requestID']))

    async def streamToClient(self, requestID):
        # 异步调用OpenAI流式接口,不阻塞事件循环
        stream = await self.client.chat.completions.create(
            model="gpt-3.5-turbo",
            messages=[{"role": "user", "content": "你的请求内容"}],
            stream=True,
            # 若需调用函数,补充对应参数
            functions=[...],
            function_call={"name": "你的函数名"}
        )
        content = ''
        # 异步遍历流式响应,保证遍历过程非阻塞
        async for chunk in stream:
            if chunk.choices[0].delta.function_call:
                chunk_content = chunk.choices[0].delta.function_call.arguments
                if chunk_content is not None:
                    content += chunk_content
                    await self.send(text_data=json.dumps({'text': content}))
        print('End', requestID)

关键修改点

  • 替换OpenAI同步客户端为AsyncOpenAI异步客户端
  • 将同步的openai.ChatCompletion.create()改为异步调用await self.client.chat.completions.create()(注意API路径更新为OpenAI新的异步格式)
  • 使用async for遍历流式响应,确保遍历过程不阻塞事件循环
  • 保留asyncio.create_task将任务提交到事件循环,让多个请求任务可以并行执行

验证效果

修改后,日志会呈现你期望的并行执行顺序:

Start 1
Start 2
End 1  # 或先输出End 2,取决于哪个请求先完成
End 2

内容的提问来源于stack exchange,提问作者Trong Lam Phan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 17:33:12