Django_channels使用问题

您好,我在channels官方文档里按照chat事例改写为一个可以传输视频的方法,但是当多个客户端进行请求时,依旧会卡顿,请问是什么原因造成的?同时自己本地测试时,如果不关闭浏览器重新进入,一段时间后也会卡顿。
以下是一些代码:

# chat/consumers.py
import json

from channels.generic.websocket import AsyncWebsocketConsumer

import cv2
import base64
import numpy as np


class ChatConsumer(AsyncWebsocketConsumer):
    # 建立连接
    async def connect(self):
        self.room_name = self.scope['url_route']['kwargs']['room_name']
        self.room_group_name = 'chat_%s' % self.room_name
        # Join room group
        await self.channel_layer.group_add(
            self.room_group_name,
            self.channel_name
        )
        await self.accept()

    async def disconnect(self, close_code):
        # Leave room group
        await self.channel_layer.group_discard(
            self.room_group_name,
            self.channel_name
        )

    # Receive message from WebSocket
    async def receive(self, text_data):
        # 将接收到的消息返回给前端
        text_data_json = json.loads(text_data)
        message = text_data_json['message']
        # print(message)
        # Send message to room group
        await self.channel_layer.group_send(
            self.room_group_name,
            {
                'type': 'chat_message',
                'message': message
            }
        )

    # Receive message from room group
    async def chat_message(self, event):
        message = event['message']
        message = myTrack(message)
        MyPose = finger()
        if MyPose != '无操作':
            # print(MyPose)
            await self.send(json.dumps({
                'pose': MyPose
            }))
        # if MyPose == '握拳' or MyPose == '点击':
        #     print(MyPose)
        #     await self.send(json.dumps({
        #         'pose': MyPose
        #     }))
        # Send message to WebSocket
        await self.send(text_data=json.dumps({
            'message': message
        }))


from video import HandTrackModel as htm
from collections import deque

detector = htm.handDetector(maxHands=1)



def myTrack(message):
    global img
    img_data = message.split(',')[1]
    img_b64 = base64.b64decode(img_data)  # base64解码
    img_array = np.frombuffer(img_b64, np.uint8)  # 转换np序列
    img_np = cv2.imdecode(img_array, cv2.IMREAD_COLOR)  # 转换Opencv格式
    img = cv2.flip(img_np, 1)
    img_hand = detector.findHands(img)
    _, encodedImage = cv2.imencode(".jpg", img_hand)
    data = np.array(encodedImage)
    img_byte = data.tobytes()
    # base64编码传输
    img_base = base64.b64encode(img_byte).decode()
    img_send = "data:image/jpg;base64," + img_base
    return img_send



pts = deque(maxlen=2)
def finger():
    fingers = None
    # 五指张开手的列表
    finger_allup = [1, 1, 1, 1, 1]
    # 握拳时手的列表
    finger_alldow = [0, 0, 0, 0, 0]
    # 比1前手的列表
    finger_two = [1, 1, 0, 0, 0]
    # 比1时手的列表
    finger_one = [0, 1, 0, 0, 0]
    ## 找到手位置坐标
    lmList, bbox = detector.findPosition(img)
    if len(lmList) != 0:
        fingers = detector.fingersUp()
        # print(fingers)
    pts.append(fingers)
    # print('第一帧:'+ str(pts[0]) + '第二帧:' + str(pts[-1]))
    if pts[0] == finger_allup and pts[-1] == finger_alldow:
        MyPose = '握拳'
        # print('握拳')
    elif pts[0] == finger_two and pts[-1] == finger_one:
        MyPose = '点击'
        # print('点击')
    else:
        MyPose = '无操作'
    return MyPose